//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2024 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto-codegenerator.
// DO NOT EDIT.

#if canImport(FoundationEssentials)
import FoundationEssentials
#else
import Foundation
#endif
@_spi(SotoInternal) import SotoCore

extension CodeCommit {
    // MARK: Enums

    public enum ApprovalState: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case approve = "APPROVE"
        case revoke = "REVOKE"
        public var description: String { return self.rawValue }
    }

    public enum BatchGetRepositoriesErrorCodeEnum: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case encryptionIntegrityChecksFailedException = "EncryptionIntegrityChecksFailedException"
        case encryptionKeyAccessDeniedException = "EncryptionKeyAccessDeniedException"
        case encryptionKeyDisabledException = "EncryptionKeyDisabledException"
        case encryptionKeyNotFoundException = "EncryptionKeyNotFoundException"
        case encryptionKeyUnavailableException = "EncryptionKeyUnavailableException"
        case repositoryDoesNotExistException = "RepositoryDoesNotExistException"
        public var description: String { return self.rawValue }
    }

    public enum ChangeTypeEnum: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case added = "A"
        case deleted = "D"
        case modified = "M"
        public var description: String { return self.rawValue }
    }

    public enum ConflictDetailLevelTypeEnum: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case fileLevel = "FILE_LEVEL"
        case lineLevel = "LINE_LEVEL"
        public var description: String { return self.rawValue }
    }

    public enum ConflictResolutionStrategyTypeEnum: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case acceptDestination = "ACCEPT_DESTINATION"
        case acceptSource = "ACCEPT_SOURCE"
        case automerge = "AUTOMERGE"
        case none = "NONE"
        public var description: String { return self.rawValue }
    }

    public enum FileModeTypeEnum: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case executable = "EXECUTABLE"
        case normal = "NORMAL"
        case symlink = "SYMLINK"
        public var description: String { return self.rawValue }
    }

    public enum MergeOptionTypeEnum: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case fastForwardMerge = "FAST_FORWARD_MERGE"
        case squashMerge = "SQUASH_MERGE"
        case threeWayMerge = "THREE_WAY_MERGE"
        public var description: String { return self.rawValue }
    }

    public enum ObjectTypeEnum: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case directory = "DIRECTORY"
        case file = "FILE"
        case gitLink = "GIT_LINK"
        case symbolicLink = "SYMBOLIC_LINK"
        public var description: String { return self.rawValue }
    }

    public enum OrderEnum: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case ascending = "ascending"
        case descending = "descending"
        public var description: String { return self.rawValue }
    }

    public enum OverrideStatus: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case override = "OVERRIDE"
        case revoke = "REVOKE"
        public var description: String { return self.rawValue }
    }

    public enum PullRequestEventType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case pullRequestApprovalRuleCreated = "PULL_REQUEST_APPROVAL_RULE_CREATED"
        case pullRequestApprovalRuleDeleted = "PULL_REQUEST_APPROVAL_RULE_DELETED"
        case pullRequestApprovalRuleOverridden = "PULL_REQUEST_APPROVAL_RULE_OVERRIDDEN"
        case pullRequestApprovalRuleUpdated = "PULL_REQUEST_APPROVAL_RULE_UPDATED"
        case pullRequestApprovalStateChanged = "PULL_REQUEST_APPROVAL_STATE_CHANGED"
        case pullRequestCreated = "PULL_REQUEST_CREATED"
        case pullRequestMergeStateChanged = "PULL_REQUEST_MERGE_STATE_CHANGED"
        case pullRequestSourceReferenceUpdated = "PULL_REQUEST_SOURCE_REFERENCE_UPDATED"
        case pullRequestStatusChanged = "PULL_REQUEST_STATUS_CHANGED"
        public var description: String { return self.rawValue }
    }

    public enum PullRequestStatusEnum: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case closed = "CLOSED"
        case open = "OPEN"
        public var description: String { return self.rawValue }
    }

    public enum RelativeFileVersionEnum: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case after = "AFTER"
        case before = "BEFORE"
        public var description: String { return self.rawValue }
    }

    public enum ReplacementTypeEnum: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case keepBase = "KEEP_BASE"
        case keepDestination = "KEEP_DESTINATION"
        case keepSource = "KEEP_SOURCE"
        case useNewContent = "USE_NEW_CONTENT"
        public var description: String { return self.rawValue }
    }

    public enum RepositoryTriggerEventEnum: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case all = "all"
        case createReference = "createReference"
        case deleteReference = "deleteReference"
        case updateReference = "updateReference"
        public var description: String { return self.rawValue }
    }

    public enum SortByEnum: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case modifiedDate = "lastModifiedDate"
        case repositoryName = "repositoryName"
        public var description: String { return self.rawValue }
    }

    // MARK: Shapes

    public struct Approval: AWSDecodableShape {
        /// The state of the approval, APPROVE or REVOKE. REVOKE states are not stored.
        public let approvalState: ApprovalState?
        /// The Amazon Resource Name (ARN) of the user.
        public let userArn: String?

        @inlinable
        public init(approvalState: ApprovalState? = nil, userArn: String? = nil) {
            self.approvalState = approvalState
            self.userArn = userArn
        }

        private enum CodingKeys: String, CodingKey {
            case approvalState = "approvalState"
            case userArn = "userArn"
        }
    }

    public struct ApprovalRule: AWSDecodableShape {
        /// The content of the approval rule.
        public let approvalRuleContent: String?
        /// The system-generated ID of the approval rule.
        public let approvalRuleId: String?
        /// The name of the approval rule.
        public let approvalRuleName: String?
        /// The date the approval rule was created, in timestamp format.
        public let creationDate: Date?
        /// The date the approval rule was most recently changed, in timestamp format.
        public let lastModifiedDate: Date?
        /// The Amazon Resource Name (ARN) of the user who made the most recent changes to the approval rule.
        public let lastModifiedUser: String?
        /// The approval rule template used to create the rule.
        public let originApprovalRuleTemplate: OriginApprovalRuleTemplate?
        /// The SHA-256 hash signature for the content of the approval rule.
        public let ruleContentSha256: String?

        @inlinable
        public init(approvalRuleContent: String? = nil, approvalRuleId: String? = nil, approvalRuleName: String? = nil, creationDate: Date? = nil, lastModifiedDate: Date? = nil, lastModifiedUser: String? = nil, originApprovalRuleTemplate: OriginApprovalRuleTemplate? = nil, ruleContentSha256: String? = nil) {
            self.approvalRuleContent = approvalRuleContent
            self.approvalRuleId = approvalRuleId
            self.approvalRuleName = approvalRuleName
            self.creationDate = creationDate
            self.lastModifiedDate = lastModifiedDate
            self.lastModifiedUser = lastModifiedUser
            self.originApprovalRuleTemplate = originApprovalRuleTemplate
            self.ruleContentSha256 = ruleContentSha256
        }

        private enum CodingKeys: String, CodingKey {
            case approvalRuleContent = "approvalRuleContent"
            case approvalRuleId = "approvalRuleId"
            case approvalRuleName = "approvalRuleName"
            case creationDate = "creationDate"
            case lastModifiedDate = "lastModifiedDate"
            case lastModifiedUser = "lastModifiedUser"
            case originApprovalRuleTemplate = "originApprovalRuleTemplate"
            case ruleContentSha256 = "ruleContentSha256"
        }
    }

    public struct ApprovalRuleEventMetadata: AWSDecodableShape {
        /// The content of the approval rule.
        public let approvalRuleContent: String?
        /// The system-generated ID of the approval rule.
        public let approvalRuleId: String?
        /// The name of the approval rule.
        public let approvalRuleName: String?

        @inlinable
        public init(approvalRuleContent: String? = nil, approvalRuleId: String? = nil, approvalRuleName: String? = nil) {
            self.approvalRuleContent = approvalRuleContent
            self.approvalRuleId = approvalRuleId
            self.approvalRuleName = approvalRuleName
        }

        private enum CodingKeys: String, CodingKey {
            case approvalRuleContent = "approvalRuleContent"
            case approvalRuleId = "approvalRuleId"
            case approvalRuleName = "approvalRuleName"
        }
    }

    public struct ApprovalRuleOverriddenEventMetadata: AWSDecodableShape {
        /// The status of the override event.
        public let overrideStatus: OverrideStatus?
        /// The revision ID of the pull request when the override event occurred.
        public let revisionId: String?

        @inlinable
        public init(overrideStatus: OverrideStatus? = nil, revisionId: String? = nil) {
            self.overrideStatus = overrideStatus
            self.revisionId = revisionId
        }

        private enum CodingKeys: String, CodingKey {
            case overrideStatus = "overrideStatus"
            case revisionId = "revisionId"
        }
    }

    public struct ApprovalRuleTemplate: AWSDecodableShape {
        /// The content of the approval rule template.
        public let approvalRuleTemplateContent: String?
        /// The description of the approval rule template.
        public let approvalRuleTemplateDescription: String?
        /// The system-generated ID of the approval rule template.
        public let approvalRuleTemplateId: String?
        /// The name of the approval rule template.
        public let approvalRuleTemplateName: String?
        /// The date the approval rule template was created, in timestamp format.
        public let creationDate: Date?
        /// The date the approval rule template was most recently changed, in timestamp format.
        public let lastModifiedDate: Date?
        /// The Amazon Resource Name (ARN) of the user who made the most recent changes to the approval rule template.
        public let lastModifiedUser: String?
        /// The SHA-256 hash signature for the content of the approval rule template.
        public let ruleContentSha256: String?

        @inlinable
        public init(approvalRuleTemplateContent: String? = nil, approvalRuleTemplateDescription: String? = nil, approvalRuleTemplateId: String? = nil, approvalRuleTemplateName: String? = nil, creationDate: Date? = nil, lastModifiedDate: Date? = nil, lastModifiedUser: String? = nil, ruleContentSha256: String? = nil) {
            self.approvalRuleTemplateContent = approvalRuleTemplateContent
            self.approvalRuleTemplateDescription = approvalRuleTemplateDescription
            self.approvalRuleTemplateId = approvalRuleTemplateId
            self.approvalRuleTemplateName = approvalRuleTemplateName
            self.creationDate = creationDate
            self.lastModifiedDate = lastModifiedDate
            self.lastModifiedUser = lastModifiedUser
            self.ruleContentSha256 = ruleContentSha256
        }

        private enum CodingKeys: String, CodingKey {
            case approvalRuleTemplateContent = "approvalRuleTemplateContent"
            case approvalRuleTemplateDescription = "approvalRuleTemplateDescription"
            case approvalRuleTemplateId = "approvalRuleTemplateId"
            case approvalRuleTemplateName = "approvalRuleTemplateName"
            case creationDate = "creationDate"
            case lastModifiedDate = "lastModifiedDate"
            case lastModifiedUser = "lastModifiedUser"
            case ruleContentSha256 = "ruleContentSha256"
        }
    }

    public struct ApprovalStateChangedEventMetadata: AWSDecodableShape {
        /// The approval status for the pull request.
        public let approvalStatus: ApprovalState?
        /// The revision ID of the pull request when the approval state changed.
        public let revisionId: String?

        @inlinable
        public init(approvalStatus: ApprovalState? = nil, revisionId: String? = nil) {
            self.approvalStatus = approvalStatus
            self.revisionId = revisionId
        }

        private enum CodingKeys: String, CodingKey {
            case approvalStatus = "approvalStatus"
            case revisionId = "revisionId"
        }
    }

    public struct AssociateApprovalRuleTemplateWithRepositoryInput: AWSEncodableShape {
        /// The name for the approval rule template.
        public let approvalRuleTemplateName: String
        /// The name of the repository that you want to associate with the template.
        public let repositoryName: String

        @inlinable
        public init(approvalRuleTemplateName: String, repositoryName: String) {
            self.approvalRuleTemplateName = approvalRuleTemplateName
            self.repositoryName = repositoryName
        }

        public func validate(name: String) throws {
            try self.validate(self.approvalRuleTemplateName, name: "approvalRuleTemplateName", parent: name, max: 100)
            try self.validate(self.approvalRuleTemplateName, name: "approvalRuleTemplateName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case approvalRuleTemplateName = "approvalRuleTemplateName"
            case repositoryName = "repositoryName"
        }
    }

    public struct BatchAssociateApprovalRuleTemplateWithRepositoriesError: AWSDecodableShape {
        /// An error code that specifies whether the repository name was not valid or not found.
        public let errorCode: String?
        /// An error message that provides details about why the repository name was not found or not valid.
        public let errorMessage: String?
        /// The name of the repository where the association was not made.
        public let repositoryName: String?

        @inlinable
        public init(errorCode: String? = nil, errorMessage: String? = nil, repositoryName: String? = nil) {
            self.errorCode = errorCode
            self.errorMessage = errorMessage
            self.repositoryName = repositoryName
        }

        private enum CodingKeys: String, CodingKey {
            case errorCode = "errorCode"
            case errorMessage = "errorMessage"
            case repositoryName = "repositoryName"
        }
    }

    public struct BatchAssociateApprovalRuleTemplateWithRepositoriesInput: AWSEncodableShape {
        /// The name of the template you want to associate with one or more repositories.
        public let approvalRuleTemplateName: String
        /// The names of the repositories you want to associate with the template.  The length constraint limit is for each string in the array. The array itself can be empty.
        public let repositoryNames: [String]

        @inlinable
        public init(approvalRuleTemplateName: String, repositoryNames: [String]) {
            self.approvalRuleTemplateName = approvalRuleTemplateName
            self.repositoryNames = repositoryNames
        }

        public func validate(name: String) throws {
            try self.validate(self.approvalRuleTemplateName, name: "approvalRuleTemplateName", parent: name, max: 100)
            try self.validate(self.approvalRuleTemplateName, name: "approvalRuleTemplateName", parent: name, min: 1)
            try self.repositoryNames.forEach {
                try validate($0, name: "repositoryNames[]", parent: name, max: 100)
                try validate($0, name: "repositoryNames[]", parent: name, min: 1)
                try validate($0, name: "repositoryNames[]", parent: name, pattern: "^[\\w\\.-]+$")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case approvalRuleTemplateName = "approvalRuleTemplateName"
            case repositoryNames = "repositoryNames"
        }
    }

    public struct BatchAssociateApprovalRuleTemplateWithRepositoriesOutput: AWSDecodableShape {
        /// A list of names of the repositories that have been associated with the template.
        public let associatedRepositoryNames: [String]
        /// A list of any errors that might have occurred while attempting to create the association between the template and the repositories.
        public let errors: [BatchAssociateApprovalRuleTemplateWithRepositoriesError]

        @inlinable
        public init(associatedRepositoryNames: [String], errors: [BatchAssociateApprovalRuleTemplateWithRepositoriesError]) {
            self.associatedRepositoryNames = associatedRepositoryNames
            self.errors = errors
        }

        private enum CodingKeys: String, CodingKey {
            case associatedRepositoryNames = "associatedRepositoryNames"
            case errors = "errors"
        }
    }

    public struct BatchDescribeMergeConflictsError: AWSDecodableShape {
        /// The name of the exception.
        public let exceptionName: String
        /// The path to the file.
        public let filePath: String
        /// The message provided by the exception.
        public let message: String

        @inlinable
        public init(exceptionName: String, filePath: String, message: String) {
            self.exceptionName = exceptionName
            self.filePath = filePath
            self.message = message
        }

        private enum CodingKeys: String, CodingKey {
            case exceptionName = "exceptionName"
            case filePath = "filePath"
            case message = "message"
        }
    }

    public struct BatchDescribeMergeConflictsInput: AWSEncodableShape {
        /// The level of conflict detail to use. If unspecified, the default FILE_LEVEL is used, which returns a not-mergeable result if the same file has differences in both branches. If LINE_LEVEL is specified, a conflict is considered not mergeable if the same file in both branches has differences on the same line.
        public let conflictDetailLevel: ConflictDetailLevelTypeEnum?
        /// Specifies which branch to use when resolving conflicts, or whether to attempt automatically merging two versions of a file. The default is NONE, which requires any conflicts to be resolved manually before the merge operation is successful.
        public let conflictResolutionStrategy: ConflictResolutionStrategyTypeEnum?
        /// The branch, tag, HEAD, or other fully qualified reference used to identify a commit (for example, a branch name or a full commit ID).
        public let destinationCommitSpecifier: String
        /// The path of the target files used to describe the conflicts. If not specified, the default is all conflict files.
        public let filePaths: [String]?
        /// The maximum number of files to include in the output.
        public let maxConflictFiles: Int?
        /// The maximum number of merge hunks to include in the output.
        public let maxMergeHunks: Int?
        /// The merge option or strategy you want to use to merge the code.
        public let mergeOption: MergeOptionTypeEnum
        /// An enumeration token that, when provided in a request, returns the next batch of the results.
        public let nextToken: String?
        /// The name of the repository that contains the merge conflicts you want to review.
        public let repositoryName: String
        /// The branch, tag, HEAD, or other fully qualified reference used to identify a commit (for example, a branch name or a full commit ID).
        public let sourceCommitSpecifier: String

        @inlinable
        public init(conflictDetailLevel: ConflictDetailLevelTypeEnum? = nil, conflictResolutionStrategy: ConflictResolutionStrategyTypeEnum? = nil, destinationCommitSpecifier: String, filePaths: [String]? = nil, maxConflictFiles: Int? = nil, maxMergeHunks: Int? = nil, mergeOption: MergeOptionTypeEnum, nextToken: String? = nil, repositoryName: String, sourceCommitSpecifier: String) {
            self.conflictDetailLevel = conflictDetailLevel
            self.conflictResolutionStrategy = conflictResolutionStrategy
            self.destinationCommitSpecifier = destinationCommitSpecifier
            self.filePaths = filePaths
            self.maxConflictFiles = maxConflictFiles
            self.maxMergeHunks = maxMergeHunks
            self.mergeOption = mergeOption
            self.nextToken = nextToken
            self.repositoryName = repositoryName
            self.sourceCommitSpecifier = sourceCommitSpecifier
        }

        public func validate(name: String) throws {
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case conflictDetailLevel = "conflictDetailLevel"
            case conflictResolutionStrategy = "conflictResolutionStrategy"
            case destinationCommitSpecifier = "destinationCommitSpecifier"
            case filePaths = "filePaths"
            case maxConflictFiles = "maxConflictFiles"
            case maxMergeHunks = "maxMergeHunks"
            case mergeOption = "mergeOption"
            case nextToken = "nextToken"
            case repositoryName = "repositoryName"
            case sourceCommitSpecifier = "sourceCommitSpecifier"
        }
    }

    public struct BatchDescribeMergeConflictsOutput: AWSDecodableShape {
        /// The commit ID of the merge base.
        public let baseCommitId: String?
        /// A list of conflicts for each file, including the conflict metadata and the hunks of the differences between the files.
        public let conflicts: [Conflict]
        /// The commit ID of the destination commit specifier that was used in the merge evaluation.
        public let destinationCommitId: String
        /// A list of any errors returned while describing the merge conflicts for each file.
        public let errors: [BatchDescribeMergeConflictsError]?
        /// An enumeration token that can be used in a request to return the next batch of the results.
        public let nextToken: String?
        /// The commit ID of the source commit specifier that was used in the merge evaluation.
        public let sourceCommitId: String

        @inlinable
        public init(baseCommitId: String? = nil, conflicts: [Conflict], destinationCommitId: String, errors: [BatchDescribeMergeConflictsError]? = nil, nextToken: String? = nil, sourceCommitId: String) {
            self.baseCommitId = baseCommitId
            self.conflicts = conflicts
            self.destinationCommitId = destinationCommitId
            self.errors = errors
            self.nextToken = nextToken
            self.sourceCommitId = sourceCommitId
        }

        private enum CodingKeys: String, CodingKey {
            case baseCommitId = "baseCommitId"
            case conflicts = "conflicts"
            case destinationCommitId = "destinationCommitId"
            case errors = "errors"
            case nextToken = "nextToken"
            case sourceCommitId = "sourceCommitId"
        }
    }

    public struct BatchDisassociateApprovalRuleTemplateFromRepositoriesError: AWSDecodableShape {
        /// An error code that specifies whether the repository name was not valid or not found.
        public let errorCode: String?
        /// An error message that provides details about why the repository name was either not found or not valid.
        public let errorMessage: String?
        /// The name of the repository where the association with the template was not able to be removed.
        public let repositoryName: String?

        @inlinable
        public init(errorCode: String? = nil, errorMessage: String? = nil, repositoryName: String? = nil) {
            self.errorCode = errorCode
            self.errorMessage = errorMessage
            self.repositoryName = repositoryName
        }

        private enum CodingKeys: String, CodingKey {
            case errorCode = "errorCode"
            case errorMessage = "errorMessage"
            case repositoryName = "repositoryName"
        }
    }

    public struct BatchDisassociateApprovalRuleTemplateFromRepositoriesInput: AWSEncodableShape {
        /// The name of the template that you want to disassociate from one or more repositories.
        public let approvalRuleTemplateName: String
        /// The repository names that you want to disassociate from the approval rule template.  The length constraint limit is for each string in the array. The array itself can be empty.
        public let repositoryNames: [String]

        @inlinable
        public init(approvalRuleTemplateName: String, repositoryNames: [String]) {
            self.approvalRuleTemplateName = approvalRuleTemplateName
            self.repositoryNames = repositoryNames
        }

        public func validate(name: String) throws {
            try self.validate(self.approvalRuleTemplateName, name: "approvalRuleTemplateName", parent: name, max: 100)
            try self.validate(self.approvalRuleTemplateName, name: "approvalRuleTemplateName", parent: name, min: 1)
            try self.repositoryNames.forEach {
                try validate($0, name: "repositoryNames[]", parent: name, max: 100)
                try validate($0, name: "repositoryNames[]", parent: name, min: 1)
                try validate($0, name: "repositoryNames[]", parent: name, pattern: "^[\\w\\.-]+$")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case approvalRuleTemplateName = "approvalRuleTemplateName"
            case repositoryNames = "repositoryNames"
        }
    }

    public struct BatchDisassociateApprovalRuleTemplateFromRepositoriesOutput: AWSDecodableShape {
        /// A list of repository names that have had their association with the template removed.
        public let disassociatedRepositoryNames: [String]
        /// A list of any errors that might have occurred while attempting to remove the association between the template and the repositories.
        public let errors: [BatchDisassociateApprovalRuleTemplateFromRepositoriesError]

        @inlinable
        public init(disassociatedRepositoryNames: [String], errors: [BatchDisassociateApprovalRuleTemplateFromRepositoriesError]) {
            self.disassociatedRepositoryNames = disassociatedRepositoryNames
            self.errors = errors
        }

        private enum CodingKeys: String, CodingKey {
            case disassociatedRepositoryNames = "disassociatedRepositoryNames"
            case errors = "errors"
        }
    }

    public struct BatchGetCommitsError: AWSDecodableShape {
        /// A commit ID that either could not be found or was not in a valid format.
        public let commitId: String?
        /// An error code that specifies whether the commit ID was not valid or not found.
        public let errorCode: String?
        /// An error message that provides detail about why the commit ID either was not found or was not valid.
        public let errorMessage: String?

        @inlinable
        public init(commitId: String? = nil, errorCode: String? = nil, errorMessage: String? = nil) {
            self.commitId = commitId
            self.errorCode = errorCode
            self.errorMessage = errorMessage
        }

        private enum CodingKeys: String, CodingKey {
            case commitId = "commitId"
            case errorCode = "errorCode"
            case errorMessage = "errorMessage"
        }
    }

    public struct BatchGetCommitsInput: AWSEncodableShape {
        /// The full commit IDs of the commits to get information about.  You must supply the full SHA IDs of each commit. You cannot use shortened SHA IDs.
        public let commitIds: [String]
        /// The name of the repository that contains the commits.
        public let repositoryName: String

        @inlinable
        public init(commitIds: [String], repositoryName: String) {
            self.commitIds = commitIds
            self.repositoryName = repositoryName
        }

        public func validate(name: String) throws {
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case commitIds = "commitIds"
            case repositoryName = "repositoryName"
        }
    }

    public struct BatchGetCommitsOutput: AWSDecodableShape {
        /// An array of commit data type objects, each of which contains information about a specified commit.
        public let commits: [Commit]?
        /// Returns any commit IDs for which information could not be found. For example, if one of the commit IDs was a shortened SHA ID or that commit was not found in the specified repository, the ID returns an error object with more information.
        public let errors: [BatchGetCommitsError]?

        @inlinable
        public init(commits: [Commit]? = nil, errors: [BatchGetCommitsError]? = nil) {
            self.commits = commits
            self.errors = errors
        }

        private enum CodingKeys: String, CodingKey {
            case commits = "commits"
            case errors = "errors"
        }
    }

    public struct BatchGetRepositoriesError: AWSDecodableShape {
        /// An error code that specifies the type of failure.
        public let errorCode: BatchGetRepositoriesErrorCodeEnum?
        /// An error message that provides detail about why the repository either was not found or was not in a valid state.
        public let errorMessage: String?
        /// The ID of a repository that either could not be found or was not in a valid state.
        public let repositoryId: String?
        /// The name of a repository that either could not be found or was not in a valid state.
        public let repositoryName: String?

        @inlinable
        public init(errorCode: BatchGetRepositoriesErrorCodeEnum? = nil, errorMessage: String? = nil, repositoryId: String? = nil, repositoryName: String? = nil) {
            self.errorCode = errorCode
            self.errorMessage = errorMessage
            self.repositoryId = repositoryId
            self.repositoryName = repositoryName
        }

        private enum CodingKeys: String, CodingKey {
            case errorCode = "errorCode"
            case errorMessage = "errorMessage"
            case repositoryId = "repositoryId"
            case repositoryName = "repositoryName"
        }
    }

    public struct BatchGetRepositoriesInput: AWSEncodableShape {
        /// The names of the repositories to get information about.  The length constraint limit is for each string in the array. The array itself can be empty.
        public let repositoryNames: [String]

        @inlinable
        public init(repositoryNames: [String]) {
            self.repositoryNames = repositoryNames
        }

        public func validate(name: String) throws {
            try self.repositoryNames.forEach {
                try validate($0, name: "repositoryNames[]", parent: name, max: 100)
                try validate($0, name: "repositoryNames[]", parent: name, min: 1)
                try validate($0, name: "repositoryNames[]", parent: name, pattern: "^[\\w\\.-]+$")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case repositoryNames = "repositoryNames"
        }
    }

    public struct BatchGetRepositoriesOutput: AWSDecodableShape {
        /// Returns information about any errors returned when attempting to retrieve information about the repositories.
        public let errors: [BatchGetRepositoriesError]?
        /// A list of repositories returned by the batch get repositories operation.
        public let repositories: [RepositoryMetadata]?
        /// Returns a list of repository names for which information could not be found.
        public let repositoriesNotFound: [String]?

        @inlinable
        public init(errors: [BatchGetRepositoriesError]? = nil, repositories: [RepositoryMetadata]? = nil, repositoriesNotFound: [String]? = nil) {
            self.errors = errors
            self.repositories = repositories
            self.repositoriesNotFound = repositoriesNotFound
        }

        private enum CodingKeys: String, CodingKey {
            case errors = "errors"
            case repositories = "repositories"
            case repositoriesNotFound = "repositoriesNotFound"
        }
    }

    public struct BlobMetadata: AWSDecodableShape {
        /// The full ID of the blob.
        public let blobId: String?
        /// The file mode permissions of the blob. File mode permission codes include:    100644 indicates read/write    100755 indicates read/write/execute    160000 indicates a submodule    120000 indicates a symlink
        public let mode: String?
        /// The path to the blob and associated file name, if any.
        public let path: String?

        @inlinable
        public init(blobId: String? = nil, mode: String? = nil, path: String? = nil) {
            self.blobId = blobId
            self.mode = mode
            self.path = path
        }

        private enum CodingKeys: String, CodingKey {
            case blobId = "blobId"
            case mode = "mode"
            case path = "path"
        }
    }

    public struct BranchInfo: AWSDecodableShape {
        /// The name of the branch.
        public let branchName: String?
        /// The ID of the last commit made to the branch.
        public let commitId: String?

        @inlinable
        public init(branchName: String? = nil, commitId: String? = nil) {
            self.branchName = branchName
            self.commitId = commitId
        }

        private enum CodingKeys: String, CodingKey {
            case branchName = "branchName"
            case commitId = "commitId"
        }
    }

    public struct Comment: AWSDecodableShape {
        /// The Amazon Resource Name (ARN) of the person who posted the comment.
        public let authorArn: String?
        /// The emoji reactions to a comment, if any, submitted by the user whose credentials are associated with the call to the API.
        public let callerReactions: [String]?
        /// A unique, client-generated idempotency token that, when provided in a request, ensures the request cannot be repeated with a changed parameter. If a request is received with the same parameters and a token is included, the request returns information about the initial request that used that token.
        public let clientRequestToken: String?
        /// The system-generated comment ID.
        public let commentId: String?
        /// The content of the comment.
        public let content: String?
        /// The date and time the comment was created, in timestamp format.
        public let creationDate: Date?
        /// A Boolean value indicating whether the comment has been deleted.
        public let deleted: Bool?
        /// The ID of the comment for which this comment is a reply, if any.
        public let inReplyTo: String?
        /// The date and time the comment was most recently modified, in timestamp format.
        public let lastModifiedDate: Date?
        /// A string to integer map that represents the number of individual users who have responded to a comment with the specified reactions.
        public let reactionCounts: [String: Int]?

        @inlinable
        public init(authorArn: String? = nil, callerReactions: [String]? = nil, clientRequestToken: String? = nil, commentId: String? = nil, content: String? = nil, creationDate: Date? = nil, deleted: Bool? = nil, inReplyTo: String? = nil, lastModifiedDate: Date? = nil, reactionCounts: [String: Int]? = nil) {
            self.authorArn = authorArn
            self.callerReactions = callerReactions
            self.clientRequestToken = clientRequestToken
            self.commentId = commentId
            self.content = content
            self.creationDate = creationDate
            self.deleted = deleted
            self.inReplyTo = inReplyTo
            self.lastModifiedDate = lastModifiedDate
            self.reactionCounts = reactionCounts
        }

        private enum CodingKeys: String, CodingKey {
            case authorArn = "authorArn"
            case callerReactions = "callerReactions"
            case clientRequestToken = "clientRequestToken"
            case commentId = "commentId"
            case content = "content"
            case creationDate = "creationDate"
            case deleted = "deleted"
            case inReplyTo = "inReplyTo"
            case lastModifiedDate = "lastModifiedDate"
            case reactionCounts = "reactionCounts"
        }
    }

    public struct CommentsForComparedCommit: AWSDecodableShape {
        /// The full blob ID of the commit used to establish the after of the comparison.
        public let afterBlobId: String?
        /// The full commit ID of the commit used to establish the after of the comparison.
        public let afterCommitId: String?
        /// The full blob ID of the commit used to establish the before of the comparison.
        public let beforeBlobId: String?
        /// The full commit ID of the commit used to establish the before of the comparison.
        public let beforeCommitId: String?
        /// An array of comment objects. Each comment object contains information about a comment on the comparison between commits.
        public let comments: [Comment]?
        /// Location information about the comment on the comparison, including the file name, line number, and whether the version of the file where the comment was made is BEFORE or AFTER.
        public let location: Location?
        /// The name of the repository that contains the compared commits.
        public let repositoryName: String?

        @inlinable
        public init(afterBlobId: String? = nil, afterCommitId: String? = nil, beforeBlobId: String? = nil, beforeCommitId: String? = nil, comments: [Comment]? = nil, location: Location? = nil, repositoryName: String? = nil) {
            self.afterBlobId = afterBlobId
            self.afterCommitId = afterCommitId
            self.beforeBlobId = beforeBlobId
            self.beforeCommitId = beforeCommitId
            self.comments = comments
            self.location = location
            self.repositoryName = repositoryName
        }

        private enum CodingKeys: String, CodingKey {
            case afterBlobId = "afterBlobId"
            case afterCommitId = "afterCommitId"
            case beforeBlobId = "beforeBlobId"
            case beforeCommitId = "beforeCommitId"
            case comments = "comments"
            case location = "location"
            case repositoryName = "repositoryName"
        }
    }

    public struct CommentsForPullRequest: AWSDecodableShape {
        /// The full blob ID of the file on which you want to comment on the source commit.
        public let afterBlobId: String?
        /// The full commit ID of the commit that was the tip of the source branch at the time the comment was made.
        public let afterCommitId: String?
        /// The full blob ID of the file on which you want to comment on the destination commit.
        public let beforeBlobId: String?
        /// The full commit ID of the commit that was the tip of the destination branch when the pull request was created. This commit is superceded by the after commit in the source branch when and if you merge the source branch into the destination branch.
        public let beforeCommitId: String?
        /// An array of comment objects. Each comment object contains information about a comment on the pull request.
        public let comments: [Comment]?
        /// Location information about the comment on the pull request, including the file name, line number, and whether the version of the file where the comment was made is BEFORE (destination branch) or AFTER (source branch).
        public let location: Location?
        /// The system-generated ID of the pull request.
        public let pullRequestId: String?
        /// The name of the repository that contains the pull request.
        public let repositoryName: String?

        @inlinable
        public init(afterBlobId: String? = nil, afterCommitId: String? = nil, beforeBlobId: String? = nil, beforeCommitId: String? = nil, comments: [Comment]? = nil, location: Location? = nil, pullRequestId: String? = nil, repositoryName: String? = nil) {
            self.afterBlobId = afterBlobId
            self.afterCommitId = afterCommitId
            self.beforeBlobId = beforeBlobId
            self.beforeCommitId = beforeCommitId
            self.comments = comments
            self.location = location
            self.pullRequestId = pullRequestId
            self.repositoryName = repositoryName
        }

        private enum CodingKeys: String, CodingKey {
            case afterBlobId = "afterBlobId"
            case afterCommitId = "afterCommitId"
            case beforeBlobId = "beforeBlobId"
            case beforeCommitId = "beforeCommitId"
            case comments = "comments"
            case location = "location"
            case pullRequestId = "pullRequestId"
            case repositoryName = "repositoryName"
        }
    }

    public struct Commit: AWSDecodableShape {
        /// Any other data associated with the specified commit.
        public let additionalData: String?
        /// Information about the author of the specified commit. Information includes  the date in timestamp format with GMT offset, the name of the author, and the email address for the author, as configured  in Git.
        public let author: UserInfo?
        /// The full SHA ID of the specified commit.
        public let commitId: String?
        /// Information about the person who committed the specified commit, also known as the committer. Information includes  the date in timestamp format with GMT offset, the name of the committer, and the email address for the committer, as configured  in Git. For more information about the difference between an author and a committer in Git, see Viewing the Commit History in Pro Git by Scott Chacon and Ben Straub.
        public let committer: UserInfo?
        /// The commit message associated with the specified commit.
        public let message: String?
        /// A list of parent commits for the specified commit. Each parent commit ID is the full commit ID.
        public let parents: [String]?
        /// Tree information for the specified commit.
        public let treeId: String?

        @inlinable
        public init(additionalData: String? = nil, author: UserInfo? = nil, commitId: String? = nil, committer: UserInfo? = nil, message: String? = nil, parents: [String]? = nil, treeId: String? = nil) {
            self.additionalData = additionalData
            self.author = author
            self.commitId = commitId
            self.committer = committer
            self.message = message
            self.parents = parents
            self.treeId = treeId
        }

        private enum CodingKeys: String, CodingKey {
            case additionalData = "additionalData"
            case author = "author"
            case commitId = "commitId"
            case committer = "committer"
            case message = "message"
            case parents = "parents"
            case treeId = "treeId"
        }
    }

    public struct Conflict: AWSDecodableShape {
        /// Metadata about a conflict in a merge operation.
        public let conflictMetadata: ConflictMetadata?
        /// A list of hunks that contain the differences between files or lines causing the conflict.
        public let mergeHunks: [MergeHunk]?

        @inlinable
        public init(conflictMetadata: ConflictMetadata? = nil, mergeHunks: [MergeHunk]? = nil) {
            self.conflictMetadata = conflictMetadata
            self.mergeHunks = mergeHunks
        }

        private enum CodingKeys: String, CodingKey {
            case conflictMetadata = "conflictMetadata"
            case mergeHunks = "mergeHunks"
        }
    }

    public struct ConflictMetadata: AWSDecodableShape {
        /// A boolean value indicating whether there are conflicts in the content of a file.
        public let contentConflict: Bool?
        /// A boolean value indicating whether there are conflicts in the file mode of a file.
        public let fileModeConflict: Bool?
        /// The file modes of the file in the source, destination, and base of the merge.
        public let fileModes: FileModes?
        /// The path of the file that contains conflicts.
        public let filePath: String?
        /// The file sizes of the file in the source, destination, and base of the merge.
        public let fileSizes: FileSizes?
        /// A boolean value (true or false) indicating whether the file is binary or textual in the source, destination, and base of the merge.
        public let isBinaryFile: IsBinaryFile?
        /// Whether an add, modify, or delete operation caused the conflict between the source and destination of the merge.
        public let mergeOperations: MergeOperations?
        /// The number of conflicts, including both hunk conflicts and metadata conflicts.
        public let numberOfConflicts: Int?
        /// A boolean value (true or false) indicating whether there are conflicts between the branches in the object type of a file, folder, or submodule.
        public let objectTypeConflict: Bool?
        /// Information about any object type conflicts in a merge operation.
        public let objectTypes: ObjectTypes?

        @inlinable
        public init(contentConflict: Bool? = nil, fileModeConflict: Bool? = nil, fileModes: FileModes? = nil, filePath: String? = nil, fileSizes: FileSizes? = nil, isBinaryFile: IsBinaryFile? = nil, mergeOperations: MergeOperations? = nil, numberOfConflicts: Int? = nil, objectTypeConflict: Bool? = nil, objectTypes: ObjectTypes? = nil) {
            self.contentConflict = contentConflict
            self.fileModeConflict = fileModeConflict
            self.fileModes = fileModes
            self.filePath = filePath
            self.fileSizes = fileSizes
            self.isBinaryFile = isBinaryFile
            self.mergeOperations = mergeOperations
            self.numberOfConflicts = numberOfConflicts
            self.objectTypeConflict = objectTypeConflict
            self.objectTypes = objectTypes
        }

        private enum CodingKeys: String, CodingKey {
            case contentConflict = "contentConflict"
            case fileModeConflict = "fileModeConflict"
            case fileModes = "fileModes"
            case filePath = "filePath"
            case fileSizes = "fileSizes"
            case isBinaryFile = "isBinaryFile"
            case mergeOperations = "mergeOperations"
            case numberOfConflicts = "numberOfConflicts"
            case objectTypeConflict = "objectTypeConflict"
            case objectTypes = "objectTypes"
        }
    }

    public struct ConflictResolution: AWSEncodableShape {
        /// Files to be deleted as part of the merge conflict resolution.
        public let deleteFiles: [DeleteFileEntry]?
        /// Files to have content replaced as part of the merge conflict resolution.
        public let replaceContents: [ReplaceContentEntry]?
        /// File modes that are set as part of the merge conflict resolution.
        public let setFileModes: [SetFileModeEntry]?

        @inlinable
        public init(deleteFiles: [DeleteFileEntry]? = nil, replaceContents: [ReplaceContentEntry]? = nil, setFileModes: [SetFileModeEntry]? = nil) {
            self.deleteFiles = deleteFiles
            self.replaceContents = replaceContents
            self.setFileModes = setFileModes
        }

        public func validate(name: String) throws {
            try self.replaceContents?.forEach {
                try $0.validate(name: "\(name).replaceContents[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case deleteFiles = "deleteFiles"
            case replaceContents = "replaceContents"
            case setFileModes = "setFileModes"
        }
    }

    public struct CreateApprovalRuleTemplateInput: AWSEncodableShape {
        /// The content of the approval rule that is created on pull requests in associated repositories. If you specify one or more destination references (branches), approval rules are created in an associated repository only if their destination references (branches) match those specified in the template.  When you create the content of the approval rule template, you can specify approvers in an approval pool in one of two ways:    CodeCommitApprovers: This option only requires an Amazon Web Services account and a resource. It can be used for both IAM users and federated access users whose name matches the provided resource name. This is a very powerful option that offers a great deal of flexibility. For example, if you specify the Amazon Web Services account 123456789012 and Mary_Major, all of the following are counted as approvals coming from that user:   An IAM user in the account (arn:aws:iam::123456789012:user/Mary_Major)   A federated user identified in IAM as Mary_Major (arn:aws:sts::123456789012:federated-user/Mary_Major)   This option does not recognize an active session of someone assuming the role of CodeCommitReview with a role session name of Mary_Major (arn:aws:sts::123456789012:assumed-role/CodeCommitReview/Mary_Major) unless you include a wildcard (*Mary_Major).    Fully qualified ARN: This option allows you to specify the fully qualified Amazon Resource Name (ARN) of the IAM user or role.    For more information about IAM ARNs, wildcards, and formats, see IAM Identifiers in the IAM User Guide.
        public let approvalRuleTemplateContent: String
        /// The description of the approval rule template. Consider providing a description that explains what this template does and when it might be appropriate to associate it with repositories.
        public let approvalRuleTemplateDescription: String?
        /// The name of the approval rule template. Provide descriptive names, because this name is applied to the approval rules created automatically in associated repositories.
        public let approvalRuleTemplateName: String

        @inlinable
        public init(approvalRuleTemplateContent: String, approvalRuleTemplateDescription: String? = nil, approvalRuleTemplateName: String) {
            self.approvalRuleTemplateContent = approvalRuleTemplateContent
            self.approvalRuleTemplateDescription = approvalRuleTemplateDescription
            self.approvalRuleTemplateName = approvalRuleTemplateName
        }

        public func validate(name: String) throws {
            try self.validate(self.approvalRuleTemplateContent, name: "approvalRuleTemplateContent", parent: name, max: 3000)
            try self.validate(self.approvalRuleTemplateContent, name: "approvalRuleTemplateContent", parent: name, min: 1)
            try self.validate(self.approvalRuleTemplateDescription, name: "approvalRuleTemplateDescription", parent: name, max: 1000)
            try self.validate(self.approvalRuleTemplateName, name: "approvalRuleTemplateName", parent: name, max: 100)
            try self.validate(self.approvalRuleTemplateName, name: "approvalRuleTemplateName", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case approvalRuleTemplateContent = "approvalRuleTemplateContent"
            case approvalRuleTemplateDescription = "approvalRuleTemplateDescription"
            case approvalRuleTemplateName = "approvalRuleTemplateName"
        }
    }

    public struct CreateApprovalRuleTemplateOutput: AWSDecodableShape {
        /// The content and structure of the created approval rule template.
        public let approvalRuleTemplate: ApprovalRuleTemplate

        @inlinable
        public init(approvalRuleTemplate: ApprovalRuleTemplate) {
            self.approvalRuleTemplate = approvalRuleTemplate
        }

        private enum CodingKeys: String, CodingKey {
            case approvalRuleTemplate = "approvalRuleTemplate"
        }
    }

    public struct CreateBranchInput: AWSEncodableShape {
        /// The name of the new branch to create.
        public let branchName: String
        /// The ID of the commit to point the new branch to.
        public let commitId: String
        /// The name of the repository in which you want to create the new branch.
        public let repositoryName: String

        @inlinable
        public init(branchName: String, commitId: String, repositoryName: String) {
            self.branchName = branchName
            self.commitId = commitId
            self.repositoryName = repositoryName
        }

        public func validate(name: String) throws {
            try self.validate(self.branchName, name: "branchName", parent: name, max: 256)
            try self.validate(self.branchName, name: "branchName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case branchName = "branchName"
            case commitId = "commitId"
            case repositoryName = "repositoryName"
        }
    }

    public struct CreateCommitInput: AWSEncodableShape {
        /// The name of the author who created the commit. This information is used as both the author and committer for the commit.
        public let authorName: String?
        /// The name of the branch where you create the commit.
        public let branchName: String
        /// The commit message you want to include in the commit. Commit messages are limited to 256 KB. If no message is specified, a default message is used.
        public let commitMessage: String?
        /// The files to delete in this commit. These files still exist in earlier commits.
        public let deleteFiles: [DeleteFileEntry]?
        /// The email address of the person who created the commit.
        public let email: String?
        /// If the commit contains deletions, whether to keep a folder or folder structure if the changes leave the folders empty. If true, a ..gitkeep file is created for empty folders. The default is false.
        public let keepEmptyFolders: Bool?
        /// The ID of the commit that is the parent of the commit you create. Not required if this is an empty repository.
        public let parentCommitId: String?
        /// The files to add or update in this commit.
        public let putFiles: [PutFileEntry]?
        /// The name of the repository where you create the commit.
        public let repositoryName: String
        /// The file modes to update for files in this commit.
        public let setFileModes: [SetFileModeEntry]?

        @inlinable
        public init(authorName: String? = nil, branchName: String, commitMessage: String? = nil, deleteFiles: [DeleteFileEntry]? = nil, email: String? = nil, keepEmptyFolders: Bool? = nil, parentCommitId: String? = nil, putFiles: [PutFileEntry]? = nil, repositoryName: String, setFileModes: [SetFileModeEntry]? = nil) {
            self.authorName = authorName
            self.branchName = branchName
            self.commitMessage = commitMessage
            self.deleteFiles = deleteFiles
            self.email = email
            self.keepEmptyFolders = keepEmptyFolders
            self.parentCommitId = parentCommitId
            self.putFiles = putFiles
            self.repositoryName = repositoryName
            self.setFileModes = setFileModes
        }

        public func validate(name: String) throws {
            try self.validate(self.branchName, name: "branchName", parent: name, max: 256)
            try self.validate(self.branchName, name: "branchName", parent: name, min: 1)
            try self.putFiles?.forEach {
                try $0.validate(name: "\(name).putFiles[]")
            }
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case authorName = "authorName"
            case branchName = "branchName"
            case commitMessage = "commitMessage"
            case deleteFiles = "deleteFiles"
            case email = "email"
            case keepEmptyFolders = "keepEmptyFolders"
            case parentCommitId = "parentCommitId"
            case putFiles = "putFiles"
            case repositoryName = "repositoryName"
            case setFileModes = "setFileModes"
        }
    }

    public struct CreateCommitOutput: AWSDecodableShape {
        /// The full commit ID of the commit that contains your committed file changes.
        public let commitId: String?
        /// The files added as part of the committed file changes.
        public let filesAdded: [FileMetadata]?
        /// The files deleted as part of the committed file changes.
        public let filesDeleted: [FileMetadata]?
        /// The files updated as part of the commited file changes.
        public let filesUpdated: [FileMetadata]?
        /// The full SHA-1 pointer of the tree information for the commit that contains the commited file changes.
        public let treeId: String?

        @inlinable
        public init(commitId: String? = nil, filesAdded: [FileMetadata]? = nil, filesDeleted: [FileMetadata]? = nil, filesUpdated: [FileMetadata]? = nil, treeId: String? = nil) {
            self.commitId = commitId
            self.filesAdded = filesAdded
            self.filesDeleted = filesDeleted
            self.filesUpdated = filesUpdated
            self.treeId = treeId
        }

        private enum CodingKeys: String, CodingKey {
            case commitId = "commitId"
            case filesAdded = "filesAdded"
            case filesDeleted = "filesDeleted"
            case filesUpdated = "filesUpdated"
            case treeId = "treeId"
        }
    }

    public struct CreatePullRequestApprovalRuleInput: AWSEncodableShape {
        /// The content of the approval rule, including the number of approvals needed and the structure of an approval pool defined for approvals, if any. For more information about approval pools, see the CodeCommit User Guide.  When you create the content of the approval rule, you can specify approvers in an approval pool in one of two ways:    CodeCommitApprovers: This option only requires an Amazon Web Services account and a resource. It can be used for both IAM users and federated access users whose name matches the provided resource name. This is a very powerful option that offers a great deal of flexibility. For example, if you specify the Amazon Web Services account 123456789012 and Mary_Major, all of the following would be counted as approvals coming from that user:   An IAM user in the account (arn:aws:iam::123456789012:user/Mary_Major)   A federated user identified in IAM as Mary_Major (arn:aws:sts::123456789012:federated-user/Mary_Major)   This option does not recognize an active session of someone assuming the role of CodeCommitReview with a role session name of Mary_Major (arn:aws:sts::123456789012:assumed-role/CodeCommitReview/Mary_Major) unless you include a wildcard (*Mary_Major).    Fully qualified ARN: This option allows you to specify the fully qualified Amazon Resource Name (ARN) of the IAM user or role.    For more information about IAM ARNs, wildcards, and formats, see IAM Identifiers in the IAM User Guide.
        public let approvalRuleContent: String
        /// The name for the approval rule.
        public let approvalRuleName: String
        /// The system-generated ID of the pull request for which you want to create the approval rule.
        public let pullRequestId: String

        @inlinable
        public init(approvalRuleContent: String, approvalRuleName: String, pullRequestId: String) {
            self.approvalRuleContent = approvalRuleContent
            self.approvalRuleName = approvalRuleName
            self.pullRequestId = pullRequestId
        }

        public func validate(name: String) throws {
            try self.validate(self.approvalRuleContent, name: "approvalRuleContent", parent: name, max: 3000)
            try self.validate(self.approvalRuleContent, name: "approvalRuleContent", parent: name, min: 1)
            try self.validate(self.approvalRuleName, name: "approvalRuleName", parent: name, max: 100)
            try self.validate(self.approvalRuleName, name: "approvalRuleName", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case approvalRuleContent = "approvalRuleContent"
            case approvalRuleName = "approvalRuleName"
            case pullRequestId = "pullRequestId"
        }
    }

    public struct CreatePullRequestApprovalRuleOutput: AWSDecodableShape {
        /// Information about the created approval rule.
        public let approvalRule: ApprovalRule

        @inlinable
        public init(approvalRule: ApprovalRule) {
            self.approvalRule = approvalRule
        }

        private enum CodingKeys: String, CodingKey {
            case approvalRule = "approvalRule"
        }
    }

    public struct CreatePullRequestInput: AWSEncodableShape {
        /// A unique, client-generated idempotency token that, when provided in a request, ensures the request cannot be repeated with a changed parameter. If a request is received with the same parameters and a token is included, the request returns information about the initial request that used that token.  The Amazon Web ServicesSDKs prepopulate client request tokens. If you are using an Amazon Web ServicesSDK, an idempotency token is created for you.
        public let clientRequestToken: String?
        /// A description of the pull request.
        public let description: String?
        /// The targets for the pull request, including the source of the code to be reviewed (the source branch) and the destination where the creator of the pull request intends the code to be merged after the pull request is closed (the destination branch).
        public let targets: [Target]
        /// The title of the pull request. This title is used to identify the pull request to other users in the repository.
        public let title: String

        @inlinable
        public init(clientRequestToken: String? = CreatePullRequestInput.idempotencyToken(), description: String? = nil, targets: [Target], title: String) {
            self.clientRequestToken = clientRequestToken
            self.description = description
            self.targets = targets
            self.title = title
        }

        public func validate(name: String) throws {
            try self.validate(self.description, name: "description", parent: name, max: 10240)
            try self.targets.forEach {
                try $0.validate(name: "\(name).targets[]")
            }
            try self.validate(self.title, name: "title", parent: name, max: 150)
        }

        private enum CodingKeys: String, CodingKey {
            case clientRequestToken = "clientRequestToken"
            case description = "description"
            case targets = "targets"
            case title = "title"
        }
    }

    public struct CreatePullRequestOutput: AWSDecodableShape {
        /// Information about the newly created pull request.
        public let pullRequest: PullRequest

        @inlinable
        public init(pullRequest: PullRequest) {
            self.pullRequest = pullRequest
        }

        private enum CodingKeys: String, CodingKey {
            case pullRequest = "pullRequest"
        }
    }

    public struct CreateRepositoryInput: AWSEncodableShape {
        /// The ID of the encryption key. You can view the ID of an encryption key in the KMS console, or use the KMS APIs to programmatically retrieve a key ID. For more information about acceptable values for kmsKeyID, see  KeyId in the Decrypt API description in  the Key Management Service API Reference. If no key is specified, the default aws/codecommit Amazon Web Services managed key is used.
        public let kmsKeyId: String?
        /// A comment or description about the new repository.  The description field for a repository accepts all HTML characters and all valid Unicode characters. Applications that do not HTML-encode the description and display it in a webpage can expose users to potentially malicious code. Make sure that you HTML-encode the description field in any application that uses this API to display the repository description on a webpage.
        public let repositoryDescription: String?
        /// The name of the new repository to be created.  The repository name must be unique across the calling Amazon Web Services account. Repository names are limited to 100 alphanumeric, dash, and underscore characters, and cannot include certain characters. For more information about the limits on repository names, see Quotas in the CodeCommit User Guide. The suffix .git is prohibited.
        public let repositoryName: String
        /// One or more tag key-value pairs to use when tagging this repository.
        public let tags: [String: String]?

        @inlinable
        public init(kmsKeyId: String? = nil, repositoryDescription: String? = nil, repositoryName: String, tags: [String: String]? = nil) {
            self.kmsKeyId = kmsKeyId
            self.repositoryDescription = repositoryDescription
            self.repositoryName = repositoryName
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.kmsKeyId, name: "kmsKeyId", parent: name, pattern: "^[a-zA-Z0-9:/_-]+$")
            try self.validate(self.repositoryDescription, name: "repositoryDescription", parent: name, max: 1000)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
            try self.tags?.forEach {
                try validate($0.key, name: "tags.key", parent: name, max: 128)
                try validate($0.key, name: "tags.key", parent: name, min: 1)
                try validate($0.value, name: "tags[\"\($0.key)\"]", parent: name, max: 256)
            }
        }

        private enum CodingKeys: String, CodingKey {
            case kmsKeyId = "kmsKeyId"
            case repositoryDescription = "repositoryDescription"
            case repositoryName = "repositoryName"
            case tags = "tags"
        }
    }

    public struct CreateRepositoryOutput: AWSDecodableShape {
        /// Information about the newly created repository.
        public let repositoryMetadata: RepositoryMetadata?

        @inlinable
        public init(repositoryMetadata: RepositoryMetadata? = nil) {
            self.repositoryMetadata = repositoryMetadata
        }

        private enum CodingKeys: String, CodingKey {
            case repositoryMetadata = "repositoryMetadata"
        }
    }

    public struct CreateUnreferencedMergeCommitInput: AWSEncodableShape {
        /// The name of the author who created the unreferenced commit. This information is used as both the author and committer for the commit.
        public let authorName: String?
        /// The commit message for the unreferenced commit.
        public let commitMessage: String?
        /// The level of conflict detail to use. If unspecified, the default FILE_LEVEL is used, which returns a not-mergeable result if the same file has differences in both branches. If LINE_LEVEL is specified, a conflict is considered not mergeable if the same file in both branches has differences on the same line.
        public let conflictDetailLevel: ConflictDetailLevelTypeEnum?
        /// If AUTOMERGE is the conflict resolution strategy, a list of inputs to use when resolving conflicts during a merge.
        public let conflictResolution: ConflictResolution?
        /// Specifies which branch to use when resolving conflicts, or whether to attempt automatically merging two versions of a file. The default is NONE, which requires any conflicts to be resolved manually before the merge operation is successful.
        public let conflictResolutionStrategy: ConflictResolutionStrategyTypeEnum?
        /// The branch, tag, HEAD, or other fully qualified reference used to identify a commit (for example, a branch name or a full commit ID).
        public let destinationCommitSpecifier: String
        /// The email address for the person who created the unreferenced commit.
        public let email: String?
        /// If the commit contains deletions, whether to keep a folder or folder structure if the changes leave the folders empty. If this is specified as true, a .gitkeep file is created for empty folders. The default is false.
        public let keepEmptyFolders: Bool?
        /// The merge option or strategy you want to use to merge the code.
        public let mergeOption: MergeOptionTypeEnum
        /// The name of the repository where you want to create the unreferenced merge commit.
        public let repositoryName: String
        /// The branch, tag, HEAD, or other fully qualified reference used to identify a commit (for example, a branch name or a full commit ID).
        public let sourceCommitSpecifier: String

        @inlinable
        public init(authorName: String? = nil, commitMessage: String? = nil, conflictDetailLevel: ConflictDetailLevelTypeEnum? = nil, conflictResolution: ConflictResolution? = nil, conflictResolutionStrategy: ConflictResolutionStrategyTypeEnum? = nil, destinationCommitSpecifier: String, email: String? = nil, keepEmptyFolders: Bool? = nil, mergeOption: MergeOptionTypeEnum, repositoryName: String, sourceCommitSpecifier: String) {
            self.authorName = authorName
            self.commitMessage = commitMessage
            self.conflictDetailLevel = conflictDetailLevel
            self.conflictResolution = conflictResolution
            self.conflictResolutionStrategy = conflictResolutionStrategy
            self.destinationCommitSpecifier = destinationCommitSpecifier
            self.email = email
            self.keepEmptyFolders = keepEmptyFolders
            self.mergeOption = mergeOption
            self.repositoryName = repositoryName
            self.sourceCommitSpecifier = sourceCommitSpecifier
        }

        public func validate(name: String) throws {
            try self.conflictResolution?.validate(name: "\(name).conflictResolution")
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case authorName = "authorName"
            case commitMessage = "commitMessage"
            case conflictDetailLevel = "conflictDetailLevel"
            case conflictResolution = "conflictResolution"
            case conflictResolutionStrategy = "conflictResolutionStrategy"
            case destinationCommitSpecifier = "destinationCommitSpecifier"
            case email = "email"
            case keepEmptyFolders = "keepEmptyFolders"
            case mergeOption = "mergeOption"
            case repositoryName = "repositoryName"
            case sourceCommitSpecifier = "sourceCommitSpecifier"
        }
    }

    public struct CreateUnreferencedMergeCommitOutput: AWSDecodableShape {
        /// The full commit ID of the commit that contains your merge results.
        public let commitId: String?
        /// The full SHA-1 pointer of the tree information for the commit that contains the merge results.
        public let treeId: String?

        @inlinable
        public init(commitId: String? = nil, treeId: String? = nil) {
            self.commitId = commitId
            self.treeId = treeId
        }

        private enum CodingKeys: String, CodingKey {
            case commitId = "commitId"
            case treeId = "treeId"
        }
    }

    public struct DeleteApprovalRuleTemplateInput: AWSEncodableShape {
        /// The name of the approval rule template to delete.
        public let approvalRuleTemplateName: String

        @inlinable
        public init(approvalRuleTemplateName: String) {
            self.approvalRuleTemplateName = approvalRuleTemplateName
        }

        public func validate(name: String) throws {
            try self.validate(self.approvalRuleTemplateName, name: "approvalRuleTemplateName", parent: name, max: 100)
            try self.validate(self.approvalRuleTemplateName, name: "approvalRuleTemplateName", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case approvalRuleTemplateName = "approvalRuleTemplateName"
        }
    }

    public struct DeleteApprovalRuleTemplateOutput: AWSDecodableShape {
        /// The system-generated ID of the deleted approval rule template. If the template has been previously deleted, the only response is a 200 OK.
        public let approvalRuleTemplateId: String

        @inlinable
        public init(approvalRuleTemplateId: String) {
            self.approvalRuleTemplateId = approvalRuleTemplateId
        }

        private enum CodingKeys: String, CodingKey {
            case approvalRuleTemplateId = "approvalRuleTemplateId"
        }
    }

    public struct DeleteBranchInput: AWSEncodableShape {
        /// The name of the branch to delete.
        public let branchName: String
        /// The name of the repository that contains the branch to be deleted.
        public let repositoryName: String

        @inlinable
        public init(branchName: String, repositoryName: String) {
            self.branchName = branchName
            self.repositoryName = repositoryName
        }

        public func validate(name: String) throws {
            try self.validate(self.branchName, name: "branchName", parent: name, max: 256)
            try self.validate(self.branchName, name: "branchName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case branchName = "branchName"
            case repositoryName = "repositoryName"
        }
    }

    public struct DeleteBranchOutput: AWSDecodableShape {
        /// Information about the branch deleted by the operation, including the branch name and the commit ID that was the tip of the branch.
        public let deletedBranch: BranchInfo?

        @inlinable
        public init(deletedBranch: BranchInfo? = nil) {
            self.deletedBranch = deletedBranch
        }

        private enum CodingKeys: String, CodingKey {
            case deletedBranch = "deletedBranch"
        }
    }

    public struct DeleteCommentContentInput: AWSEncodableShape {
        /// The unique, system-generated ID of the comment. To get this ID, use  GetCommentsForComparedCommit or GetCommentsForPullRequest.
        public let commentId: String

        @inlinable
        public init(commentId: String) {
            self.commentId = commentId
        }

        private enum CodingKeys: String, CodingKey {
            case commentId = "commentId"
        }
    }

    public struct DeleteCommentContentOutput: AWSDecodableShape {
        /// Information about the comment you just deleted.
        public let comment: Comment?

        @inlinable
        public init(comment: Comment? = nil) {
            self.comment = comment
        }

        private enum CodingKeys: String, CodingKey {
            case comment = "comment"
        }
    }

    public struct DeleteFileEntry: AWSEncodableShape {
        /// The full path of the file to be deleted, including the name of the file.
        public let filePath: String

        @inlinable
        public init(filePath: String) {
            self.filePath = filePath
        }

        private enum CodingKeys: String, CodingKey {
            case filePath = "filePath"
        }
    }

    public struct DeleteFileInput: AWSEncodableShape {
        /// The name of the branch where the commit that deletes the file is made.
        public let branchName: String
        /// The commit message you want to include as part of deleting the file. Commit messages are limited to 256 KB. If no message is specified, a default message is used.
        public let commitMessage: String?
        /// The email address for the commit that deletes the file. If no email address is specified, the email address is left blank.
        public let email: String?
        /// The fully qualified path to the file that to be deleted, including the full name and extension of that file. For example, /examples/file.md is a fully qualified path to a file named file.md in a folder named examples.
        public let filePath: String
        /// If a file is the only object in the folder or directory, specifies whether to delete the folder or directory that contains the file. By default, empty folders are deleted. This includes empty folders that are part of the directory structure. For example, if the path to a file is dir1/dir2/dir3/dir4, and dir2 and dir3 are empty, deleting the last file in dir4 also deletes the empty folders dir4, dir3, and dir2.
        public let keepEmptyFolders: Bool?
        /// The name of the author of the commit that deletes the file. If no name is specified, the user's ARN is used as the author name and committer name.
        public let name: String?
        /// The ID of the commit that is the tip of the branch where you want to create the commit that deletes the file. This must be the HEAD commit for the branch. The commit that deletes the file is created from this commit ID.
        public let parentCommitId: String
        /// The name of the repository that contains the file to delete.
        public let repositoryName: String

        @inlinable
        public init(branchName: String, commitMessage: String? = nil, email: String? = nil, filePath: String, keepEmptyFolders: Bool? = nil, name: String? = nil, parentCommitId: String, repositoryName: String) {
            self.branchName = branchName
            self.commitMessage = commitMessage
            self.email = email
            self.filePath = filePath
            self.keepEmptyFolders = keepEmptyFolders
            self.name = name
            self.parentCommitId = parentCommitId
            self.repositoryName = repositoryName
        }

        public func validate(name: String) throws {
            try self.validate(self.branchName, name: "branchName", parent: name, max: 256)
            try self.validate(self.branchName, name: "branchName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case branchName = "branchName"
            case commitMessage = "commitMessage"
            case email = "email"
            case filePath = "filePath"
            case keepEmptyFolders = "keepEmptyFolders"
            case name = "name"
            case parentCommitId = "parentCommitId"
            case repositoryName = "repositoryName"
        }
    }

    public struct DeleteFileOutput: AWSDecodableShape {
        /// The blob ID removed from the tree as part of deleting the file.
        public let blobId: String
        /// The full commit ID of the commit that contains the change that deletes the file.
        public let commitId: String
        /// The fully qualified path to the file to be deleted, including the full name and extension of that file.
        public let filePath: String
        /// The full SHA-1 pointer of the tree information for the commit that contains the delete file change.
        public let treeId: String

        @inlinable
        public init(blobId: String, commitId: String, filePath: String, treeId: String) {
            self.blobId = blobId
            self.commitId = commitId
            self.filePath = filePath
            self.treeId = treeId
        }

        private enum CodingKeys: String, CodingKey {
            case blobId = "blobId"
            case commitId = "commitId"
            case filePath = "filePath"
            case treeId = "treeId"
        }
    }

    public struct DeletePullRequestApprovalRuleInput: AWSEncodableShape {
        /// The name of the approval rule you want to delete.
        public let approvalRuleName: String
        /// The system-generated ID of the pull request that contains the approval rule you want to delete.
        public let pullRequestId: String

        @inlinable
        public init(approvalRuleName: String, pullRequestId: String) {
            self.approvalRuleName = approvalRuleName
            self.pullRequestId = pullRequestId
        }

        public func validate(name: String) throws {
            try self.validate(self.approvalRuleName, name: "approvalRuleName", parent: name, max: 100)
            try self.validate(self.approvalRuleName, name: "approvalRuleName", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case approvalRuleName = "approvalRuleName"
            case pullRequestId = "pullRequestId"
        }
    }

    public struct DeletePullRequestApprovalRuleOutput: AWSDecodableShape {
        /// The ID of the deleted approval rule.   If the approval rule was deleted in an earlier API call, the response is 200 OK without content.
        public let approvalRuleId: String

        @inlinable
        public init(approvalRuleId: String) {
            self.approvalRuleId = approvalRuleId
        }

        private enum CodingKeys: String, CodingKey {
            case approvalRuleId = "approvalRuleId"
        }
    }

    public struct DeleteRepositoryInput: AWSEncodableShape {
        /// The name of the repository to delete.
        public let repositoryName: String

        @inlinable
        public init(repositoryName: String) {
            self.repositoryName = repositoryName
        }

        public func validate(name: String) throws {
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case repositoryName = "repositoryName"
        }
    }

    public struct DeleteRepositoryOutput: AWSDecodableShape {
        /// The ID of the repository that was deleted.
        public let repositoryId: String?

        @inlinable
        public init(repositoryId: String? = nil) {
            self.repositoryId = repositoryId
        }

        private enum CodingKeys: String, CodingKey {
            case repositoryId = "repositoryId"
        }
    }

    public struct DescribeMergeConflictsInput: AWSEncodableShape {
        /// The level of conflict detail to use. If unspecified, the default FILE_LEVEL is used, which returns a not-mergeable result if the same file has differences in both branches. If LINE_LEVEL is specified, a conflict is considered not mergeable if the same file in both branches has differences on the same line.
        public let conflictDetailLevel: ConflictDetailLevelTypeEnum?
        /// Specifies which branch to use when resolving conflicts, or whether to attempt automatically merging two versions of a file. The default is NONE, which requires any conflicts to be resolved manually before the merge operation is successful.
        public let conflictResolutionStrategy: ConflictResolutionStrategyTypeEnum?
        /// The branch, tag, HEAD, or other fully qualified reference used to identify a commit (for example, a branch name or a full commit ID).
        public let destinationCommitSpecifier: String
        /// The path of the target files used to describe the conflicts.
        public let filePath: String
        /// The maximum number of merge hunks to include in the output.
        public let maxMergeHunks: Int?
        /// The merge option or strategy you want to use to merge the code.
        public let mergeOption: MergeOptionTypeEnum
        /// An enumeration token that, when provided in a request, returns the next batch of the results.
        public let nextToken: String?
        /// The name of the repository where you want to get information about a merge conflict.
        public let repositoryName: String
        /// The branch, tag, HEAD, or other fully qualified reference used to identify a commit (for example, a branch name or a full commit ID).
        public let sourceCommitSpecifier: String

        @inlinable
        public init(conflictDetailLevel: ConflictDetailLevelTypeEnum? = nil, conflictResolutionStrategy: ConflictResolutionStrategyTypeEnum? = nil, destinationCommitSpecifier: String, filePath: String, maxMergeHunks: Int? = nil, mergeOption: MergeOptionTypeEnum, nextToken: String? = nil, repositoryName: String, sourceCommitSpecifier: String) {
            self.conflictDetailLevel = conflictDetailLevel
            self.conflictResolutionStrategy = conflictResolutionStrategy
            self.destinationCommitSpecifier = destinationCommitSpecifier
            self.filePath = filePath
            self.maxMergeHunks = maxMergeHunks
            self.mergeOption = mergeOption
            self.nextToken = nextToken
            self.repositoryName = repositoryName
            self.sourceCommitSpecifier = sourceCommitSpecifier
        }

        public func validate(name: String) throws {
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case conflictDetailLevel = "conflictDetailLevel"
            case conflictResolutionStrategy = "conflictResolutionStrategy"
            case destinationCommitSpecifier = "destinationCommitSpecifier"
            case filePath = "filePath"
            case maxMergeHunks = "maxMergeHunks"
            case mergeOption = "mergeOption"
            case nextToken = "nextToken"
            case repositoryName = "repositoryName"
            case sourceCommitSpecifier = "sourceCommitSpecifier"
        }
    }

    public struct DescribeMergeConflictsOutput: AWSDecodableShape {
        /// The commit ID of the merge base.
        public let baseCommitId: String?
        /// Contains metadata about the conflicts found in the merge.
        public let conflictMetadata: ConflictMetadata
        /// The commit ID of the destination commit specifier that was used in the merge evaluation.
        public let destinationCommitId: String
        /// A list of merge hunks of the differences between the files or lines.
        public let mergeHunks: [MergeHunk]
        /// An enumeration token that can be used in a request to return the next batch of the results.
        public let nextToken: String?
        /// The commit ID of the source commit specifier that was used in the merge evaluation.
        public let sourceCommitId: String

        @inlinable
        public init(baseCommitId: String? = nil, conflictMetadata: ConflictMetadata, destinationCommitId: String, mergeHunks: [MergeHunk], nextToken: String? = nil, sourceCommitId: String) {
            self.baseCommitId = baseCommitId
            self.conflictMetadata = conflictMetadata
            self.destinationCommitId = destinationCommitId
            self.mergeHunks = mergeHunks
            self.nextToken = nextToken
            self.sourceCommitId = sourceCommitId
        }

        private enum CodingKeys: String, CodingKey {
            case baseCommitId = "baseCommitId"
            case conflictMetadata = "conflictMetadata"
            case destinationCommitId = "destinationCommitId"
            case mergeHunks = "mergeHunks"
            case nextToken = "nextToken"
            case sourceCommitId = "sourceCommitId"
        }
    }

    public struct DescribePullRequestEventsInput: AWSEncodableShape {
        /// The Amazon Resource Name (ARN) of the user whose actions resulted in the event. Examples include updating the pull request with more commits or changing the status of a pull request.
        public let actorArn: String?
        /// A non-zero, non-negative integer used to limit the number of returned results.  The default is 100 events, which is also the maximum number of events that can be returned in a result.
        public let maxResults: Int?
        /// An enumeration token that, when provided in a request, returns the next batch of the results.
        public let nextToken: String?
        /// Optional. The pull request event type about which you want to return information.
        public let pullRequestEventType: PullRequestEventType?
        /// The system-generated ID of the pull request. To get this ID, use ListPullRequests.
        public let pullRequestId: String

        @inlinable
        public init(actorArn: String? = nil, maxResults: Int? = nil, nextToken: String? = nil, pullRequestEventType: PullRequestEventType? = nil, pullRequestId: String) {
            self.actorArn = actorArn
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.pullRequestEventType = pullRequestEventType
            self.pullRequestId = pullRequestId
        }

        private enum CodingKeys: String, CodingKey {
            case actorArn = "actorArn"
            case maxResults = "maxResults"
            case nextToken = "nextToken"
            case pullRequestEventType = "pullRequestEventType"
            case pullRequestId = "pullRequestId"
        }
    }

    public struct DescribePullRequestEventsOutput: AWSDecodableShape {
        /// An enumeration token that can be used in a request to return the next batch of the results.
        public let nextToken: String?
        /// Information about the pull request events.
        public let pullRequestEvents: [PullRequestEvent]

        @inlinable
        public init(nextToken: String? = nil, pullRequestEvents: [PullRequestEvent]) {
            self.nextToken = nextToken
            self.pullRequestEvents = pullRequestEvents
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "nextToken"
            case pullRequestEvents = "pullRequestEvents"
        }
    }

    public struct Difference: AWSDecodableShape {
        /// Information about an afterBlob data type object, including the ID,  the file mode permission code, and the path.
        public let afterBlob: BlobMetadata?
        /// Information about a beforeBlob data type object, including the ID,  the file mode permission code, and the path.
        public let beforeBlob: BlobMetadata?
        /// Whether the change type of the difference is an addition (A), deletion (D), or modification (M).
        public let changeType: ChangeTypeEnum?

        @inlinable
        public init(afterBlob: BlobMetadata? = nil, beforeBlob: BlobMetadata? = nil, changeType: ChangeTypeEnum? = nil) {
            self.afterBlob = afterBlob
            self.beforeBlob = beforeBlob
            self.changeType = changeType
        }

        private enum CodingKeys: String, CodingKey {
            case afterBlob = "afterBlob"
            case beforeBlob = "beforeBlob"
            case changeType = "changeType"
        }
    }

    public struct DisassociateApprovalRuleTemplateFromRepositoryInput: AWSEncodableShape {
        /// The name of the approval rule template to disassociate from a specified repository.
        public let approvalRuleTemplateName: String
        /// The name of the repository you want to disassociate from the template.
        public let repositoryName: String

        @inlinable
        public init(approvalRuleTemplateName: String, repositoryName: String) {
            self.approvalRuleTemplateName = approvalRuleTemplateName
            self.repositoryName = repositoryName
        }

        public func validate(name: String) throws {
            try self.validate(self.approvalRuleTemplateName, name: "approvalRuleTemplateName", parent: name, max: 100)
            try self.validate(self.approvalRuleTemplateName, name: "approvalRuleTemplateName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case approvalRuleTemplateName = "approvalRuleTemplateName"
            case repositoryName = "repositoryName"
        }
    }

    public struct EvaluatePullRequestApprovalRulesInput: AWSEncodableShape {
        /// The system-generated ID of the pull request you want to evaluate.
        public let pullRequestId: String
        /// The system-generated ID for the pull request revision. To retrieve the most recent revision ID for a pull request, use GetPullRequest.
        public let revisionId: String

        @inlinable
        public init(pullRequestId: String, revisionId: String) {
            self.pullRequestId = pullRequestId
            self.revisionId = revisionId
        }

        private enum CodingKeys: String, CodingKey {
            case pullRequestId = "pullRequestId"
            case revisionId = "revisionId"
        }
    }

    public struct EvaluatePullRequestApprovalRulesOutput: AWSDecodableShape {
        /// The result of the evaluation, including the names of the rules whose conditions have been met (if any), the names of the rules whose conditions have  not been met (if any), whether the pull request is in the approved state, and whether the pull request approval rule has been set aside by an override.
        public let evaluation: Evaluation

        @inlinable
        public init(evaluation: Evaluation) {
            self.evaluation = evaluation
        }

        private enum CodingKeys: String, CodingKey {
            case evaluation = "evaluation"
        }
    }

    public struct Evaluation: AWSDecodableShape {
        /// The names of the approval rules that have not had their conditions met.
        public let approvalRulesNotSatisfied: [String]?
        /// The names of the approval rules that have had their conditions met.
        public let approvalRulesSatisfied: [String]?
        /// Whether the state of the pull request is approved.
        public let approved: Bool?
        /// Whether the approval rule requirements for the pull request have been overridden and no longer need to be met.
        public let overridden: Bool?

        @inlinable
        public init(approvalRulesNotSatisfied: [String]? = nil, approvalRulesSatisfied: [String]? = nil, approved: Bool? = nil, overridden: Bool? = nil) {
            self.approvalRulesNotSatisfied = approvalRulesNotSatisfied
            self.approvalRulesSatisfied = approvalRulesSatisfied
            self.approved = approved
            self.overridden = overridden
        }

        private enum CodingKeys: String, CodingKey {
            case approvalRulesNotSatisfied = "approvalRulesNotSatisfied"
            case approvalRulesSatisfied = "approvalRulesSatisfied"
            case approved = "approved"
            case overridden = "overridden"
        }
    }

    public struct File: AWSDecodableShape {
        /// The fully qualified path to the file in the repository.
        public let absolutePath: String?
        /// The blob ID that contains the file information.
        public let blobId: String?
        /// The extrapolated file mode permissions for the file. Valid values include EXECUTABLE and NORMAL.
        public let fileMode: FileModeTypeEnum?
        /// The relative path of the file from the folder where the query originated.
        public let relativePath: String?

        @inlinable
        public init(absolutePath: String? = nil, blobId: String? = nil, fileMode: FileModeTypeEnum? = nil, relativePath: String? = nil) {
            self.absolutePath = absolutePath
            self.blobId = blobId
            self.fileMode = fileMode
            self.relativePath = relativePath
        }

        private enum CodingKeys: String, CodingKey {
            case absolutePath = "absolutePath"
            case blobId = "blobId"
            case fileMode = "fileMode"
            case relativePath = "relativePath"
        }
    }

    public struct FileMetadata: AWSDecodableShape {
        /// The full path to the file to be added or updated, including the name of the file.
        public let absolutePath: String?
        /// The blob ID that contains the file information.
        public let blobId: String?
        /// The extrapolated file mode permissions for the file. Valid values include EXECUTABLE and NORMAL.
        public let fileMode: FileModeTypeEnum?

        @inlinable
        public init(absolutePath: String? = nil, blobId: String? = nil, fileMode: FileModeTypeEnum? = nil) {
            self.absolutePath = absolutePath
            self.blobId = blobId
            self.fileMode = fileMode
        }

        private enum CodingKeys: String, CodingKey {
            case absolutePath = "absolutePath"
            case blobId = "blobId"
            case fileMode = "fileMode"
        }
    }

    public struct FileModes: AWSDecodableShape {
        /// The file mode of a file in the base of a merge or pull request.
        public let base: FileModeTypeEnum?
        /// The file mode of a file in the destination of a merge or pull request.
        public let destination: FileModeTypeEnum?
        /// The file mode of a file in the source of a merge or pull request.
        public let source: FileModeTypeEnum?

        @inlinable
        public init(base: FileModeTypeEnum? = nil, destination: FileModeTypeEnum? = nil, source: FileModeTypeEnum? = nil) {
            self.base = base
            self.destination = destination
            self.source = source
        }

        private enum CodingKeys: String, CodingKey {
            case base = "base"
            case destination = "destination"
            case source = "source"
        }
    }

    public struct FileSizes: AWSDecodableShape {
        /// The size of a file in the base of a merge or pull request.
        public let base: Int64?
        /// The size of a file in the destination of a merge or pull request.
        public let destination: Int64?
        /// The  size of a file in the source of a merge or pull request.
        public let source: Int64?

        @inlinable
        public init(base: Int64? = nil, destination: Int64? = nil, source: Int64? = nil) {
            self.base = base
            self.destination = destination
            self.source = source
        }

        private enum CodingKeys: String, CodingKey {
            case base = "base"
            case destination = "destination"
            case source = "source"
        }
    }

    public struct FileVersion: AWSDecodableShape {
        /// The blob ID of the object that represents the content of the file in this version.
        public let blobId: String?
        public let commit: Commit?
        /// The name and path of the file at which this blob is indexed which contains the data for this version of the file. This value will  vary between file versions if a file is renamed or if its path changes.
        public let path: String?
        /// An array of commit IDs that contain more recent versions of this file. If there are no additional versions of the file, this array will be empty.
        public let revisionChildren: [String]?

        @inlinable
        public init(blobId: String? = nil, commit: Commit? = nil, path: String? = nil, revisionChildren: [String]? = nil) {
            self.blobId = blobId
            self.commit = commit
            self.path = path
            self.revisionChildren = revisionChildren
        }

        private enum CodingKeys: String, CodingKey {
            case blobId = "blobId"
            case commit = "commit"
            case path = "path"
            case revisionChildren = "revisionChildren"
        }
    }

    public struct Folder: AWSDecodableShape {
        /// The fully qualified path of the folder in the repository.
        public let absolutePath: String?
        /// The relative path of the specified folder from the folder where the query originated.
        public let relativePath: String?
        /// The full SHA-1 pointer of the tree information for the commit that contains the folder.
        public let treeId: String?

        @inlinable
        public init(absolutePath: String? = nil, relativePath: String? = nil, treeId: String? = nil) {
            self.absolutePath = absolutePath
            self.relativePath = relativePath
            self.treeId = treeId
        }

        private enum CodingKeys: String, CodingKey {
            case absolutePath = "absolutePath"
            case relativePath = "relativePath"
            case treeId = "treeId"
        }
    }

    public struct GetApprovalRuleTemplateInput: AWSEncodableShape {
        /// The name of the approval rule template for which you want to get information.
        public let approvalRuleTemplateName: String

        @inlinable
        public init(approvalRuleTemplateName: String) {
            self.approvalRuleTemplateName = approvalRuleTemplateName
        }

        public func validate(name: String) throws {
            try self.validate(self.approvalRuleTemplateName, name: "approvalRuleTemplateName", parent: name, max: 100)
            try self.validate(self.approvalRuleTemplateName, name: "approvalRuleTemplateName", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case approvalRuleTemplateName = "approvalRuleTemplateName"
        }
    }

    public struct GetApprovalRuleTemplateOutput: AWSDecodableShape {
        /// The content and structure of the approval rule template.
        public let approvalRuleTemplate: ApprovalRuleTemplate

        @inlinable
        public init(approvalRuleTemplate: ApprovalRuleTemplate) {
            self.approvalRuleTemplate = approvalRuleTemplate
        }

        private enum CodingKeys: String, CodingKey {
            case approvalRuleTemplate = "approvalRuleTemplate"
        }
    }

    public struct GetBlobInput: AWSEncodableShape {
        /// The ID of the blob, which is its SHA-1 pointer.
        public let blobId: String
        /// The name of the repository that contains the blob.
        public let repositoryName: String

        @inlinable
        public init(blobId: String, repositoryName: String) {
            self.blobId = blobId
            self.repositoryName = repositoryName
        }

        public func validate(name: String) throws {
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case blobId = "blobId"
            case repositoryName = "repositoryName"
        }
    }

    public struct GetBlobOutput: AWSDecodableShape {
        /// The content of the blob, usually a file.
        public let content: AWSBase64Data

        @inlinable
        public init(content: AWSBase64Data) {
            self.content = content
        }

        private enum CodingKeys: String, CodingKey {
            case content = "content"
        }
    }

    public struct GetBranchInput: AWSEncodableShape {
        /// The name of the branch for which you want to retrieve information.
        public let branchName: String?
        /// The name of the repository that contains the branch for which you want to retrieve information.
        public let repositoryName: String?

        @inlinable
        public init(branchName: String? = nil, repositoryName: String? = nil) {
            self.branchName = branchName
            self.repositoryName = repositoryName
        }

        public func validate(name: String) throws {
            try self.validate(self.branchName, name: "branchName", parent: name, max: 256)
            try self.validate(self.branchName, name: "branchName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case branchName = "branchName"
            case repositoryName = "repositoryName"
        }
    }

    public struct GetBranchOutput: AWSDecodableShape {
        /// The name of the branch.
        public let branch: BranchInfo?

        @inlinable
        public init(branch: BranchInfo? = nil) {
            self.branch = branch
        }

        private enum CodingKeys: String, CodingKey {
            case branch = "branch"
        }
    }

    public struct GetCommentInput: AWSEncodableShape {
        /// The unique, system-generated ID of the comment. To get this ID, use  GetCommentsForComparedCommit or GetCommentsForPullRequest.
        public let commentId: String

        @inlinable
        public init(commentId: String) {
            self.commentId = commentId
        }

        private enum CodingKeys: String, CodingKey {
            case commentId = "commentId"
        }
    }

    public struct GetCommentOutput: AWSDecodableShape {
        /// The contents of the comment.
        public let comment: Comment?

        @inlinable
        public init(comment: Comment? = nil) {
            self.comment = comment
        }

        private enum CodingKeys: String, CodingKey {
            case comment = "comment"
        }
    }

    public struct GetCommentReactionsInput: AWSEncodableShape {
        /// The ID of the comment for which you want to get reactions information.
        public let commentId: String
        /// A non-zero, non-negative integer used to limit the number of returned results.  The default is the same as the allowed maximum, 1,000.
        public let maxResults: Int?
        /// An enumeration token that, when provided in a request, returns the next batch of the results.
        public let nextToken: String?
        /// Optional. The Amazon Resource Name (ARN) of the user or identity for which you want to get reaction information.
        public let reactionUserArn: String?

        @inlinable
        public init(commentId: String, maxResults: Int? = nil, nextToken: String? = nil, reactionUserArn: String? = nil) {
            self.commentId = commentId
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.reactionUserArn = reactionUserArn
        }

        private enum CodingKeys: String, CodingKey {
            case commentId = "commentId"
            case maxResults = "maxResults"
            case nextToken = "nextToken"
            case reactionUserArn = "reactionUserArn"
        }
    }

    public struct GetCommentReactionsOutput: AWSDecodableShape {
        /// An enumeration token that can be used in a request to return the next batch of the results.
        public let nextToken: String?
        /// An array of reactions to the specified comment.
        public let reactionsForComment: [ReactionForComment]

        @inlinable
        public init(nextToken: String? = nil, reactionsForComment: [ReactionForComment]) {
            self.nextToken = nextToken
            self.reactionsForComment = reactionsForComment
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "nextToken"
            case reactionsForComment = "reactionsForComment"
        }
    }

    public struct GetCommentsForComparedCommitInput: AWSEncodableShape {
        /// To establish the directionality of the comparison, the full commit ID of the after commit.
        public let afterCommitId: String
        /// To establish the directionality of the comparison, the full commit ID of the before commit.
        public let beforeCommitId: String?
        /// A non-zero, non-negative integer used to limit the number of returned results. The default is 100 comments, but you can configure up to 500.
        public let maxResults: Int?
        /// An enumeration token that when provided in a request, returns the next batch of the results.
        public let nextToken: String?
        /// The name of the repository where you want to compare commits.
        public let repositoryName: String

        @inlinable
        public init(afterCommitId: String, beforeCommitId: String? = nil, maxResults: Int? = nil, nextToken: String? = nil, repositoryName: String) {
            self.afterCommitId = afterCommitId
            self.beforeCommitId = beforeCommitId
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.repositoryName = repositoryName
        }

        public func validate(name: String) throws {
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case afterCommitId = "afterCommitId"
            case beforeCommitId = "beforeCommitId"
            case maxResults = "maxResults"
            case nextToken = "nextToken"
            case repositoryName = "repositoryName"
        }
    }

    public struct GetCommentsForComparedCommitOutput: AWSDecodableShape {
        /// A list of comment objects on the compared commit.
        public let commentsForComparedCommitData: [CommentsForComparedCommit]?
        /// An enumeration token that can be used in a request to return the next batch of the results.
        public let nextToken: String?

        @inlinable
        public init(commentsForComparedCommitData: [CommentsForComparedCommit]? = nil, nextToken: String? = nil) {
            self.commentsForComparedCommitData = commentsForComparedCommitData
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case commentsForComparedCommitData = "commentsForComparedCommitData"
            case nextToken = "nextToken"
        }
    }

    public struct GetCommentsForPullRequestInput: AWSEncodableShape {
        /// The full commit ID of the commit in the source branch that was the tip of the branch at the time the comment was made. Requirement is conditional:  afterCommitId must be specified when repositoryName is included.
        public let afterCommitId: String?
        /// The full commit ID of the commit in the destination branch that was the tip of the branch at the time the pull request was created. Requirement is conditional:  beforeCommitId must be specified when repositoryName is included.
        public let beforeCommitId: String?
        /// A non-zero, non-negative integer used to limit the number of returned results. The default is 100 comments. You can return up to 500 comments with a single request.
        public let maxResults: Int?
        /// An enumeration token that, when provided in a request, returns the next batch of the results.
        public let nextToken: String?
        /// The system-generated ID of the pull request. To get this ID, use ListPullRequests.
        public let pullRequestId: String
        /// The name of the repository that contains the pull request. Requirement is conditional: repositoryName must be specified when  beforeCommitId and afterCommitId are included.
        public let repositoryName: String?

        @inlinable
        public init(afterCommitId: String? = nil, beforeCommitId: String? = nil, maxResults: Int? = nil, nextToken: String? = nil, pullRequestId: String, repositoryName: String? = nil) {
            self.afterCommitId = afterCommitId
            self.beforeCommitId = beforeCommitId
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.pullRequestId = pullRequestId
            self.repositoryName = repositoryName
        }

        public func validate(name: String) throws {
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case afterCommitId = "afterCommitId"
            case beforeCommitId = "beforeCommitId"
            case maxResults = "maxResults"
            case nextToken = "nextToken"
            case pullRequestId = "pullRequestId"
            case repositoryName = "repositoryName"
        }
    }

    public struct GetCommentsForPullRequestOutput: AWSDecodableShape {
        /// An array of comment objects on the pull request.
        public let commentsForPullRequestData: [CommentsForPullRequest]?
        /// An enumeration token that can be used in a request to return the next batch of the results.
        public let nextToken: String?

        @inlinable
        public init(commentsForPullRequestData: [CommentsForPullRequest]? = nil, nextToken: String? = nil) {
            self.commentsForPullRequestData = commentsForPullRequestData
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case commentsForPullRequestData = "commentsForPullRequestData"
            case nextToken = "nextToken"
        }
    }

    public struct GetCommitInput: AWSEncodableShape {
        /// The commit ID. Commit IDs are the full SHA ID of the commit.
        public let commitId: String
        /// The name of the repository to which the commit was made.
        public let repositoryName: String

        @inlinable
        public init(commitId: String, repositoryName: String) {
            self.commitId = commitId
            self.repositoryName = repositoryName
        }

        public func validate(name: String) throws {
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case commitId = "commitId"
            case repositoryName = "repositoryName"
        }
    }

    public struct GetCommitOutput: AWSDecodableShape {
        /// A commit data type object that contains information about the specified commit.
        public let commit: Commit

        @inlinable
        public init(commit: Commit) {
            self.commit = commit
        }

        private enum CodingKeys: String, CodingKey {
            case commit = "commit"
        }
    }

    public struct GetDifferencesInput: AWSEncodableShape {
        /// The branch, tag, HEAD, or other fully qualified reference used to identify a commit.
        public let afterCommitSpecifier: String
        /// The file path in which to check differences. Limits the results to this path. Can also be used to specify the changed name of a directory or folder, if it has changed. If not specified, differences are shown for all paths.
        public let afterPath: String?
        /// The branch, tag, HEAD, or other fully qualified reference used to identify a commit (for example, the full commit ID). Optional. If not specified, all changes before the afterCommitSpecifier value are shown. If you do not use beforeCommitSpecifier in your request, consider limiting the results with maxResults.
        public let beforeCommitSpecifier: String?
        /// The file path in which to check for differences. Limits the results to this path. Can also be used to specify the previous name of a directory or folder. If beforePath and afterPath are not specified, differences are shown for all paths.
        public let beforePath: String?
        /// A non-zero, non-negative integer used to limit the number of returned results.
        public let maxResults: Int?
        /// An enumeration token that, when provided in a request, returns the next batch of the results.
        public let nextToken: String?
        /// The name of the repository where you want to get differences.
        public let repositoryName: String

        @inlinable
        public init(afterCommitSpecifier: String, afterPath: String? = nil, beforeCommitSpecifier: String? = nil, beforePath: String? = nil, maxResults: Int? = nil, nextToken: String? = nil, repositoryName: String) {
            self.afterCommitSpecifier = afterCommitSpecifier
            self.afterPath = afterPath
            self.beforeCommitSpecifier = beforeCommitSpecifier
            self.beforePath = beforePath
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.repositoryName = repositoryName
        }

        public func validate(name: String) throws {
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case afterCommitSpecifier = "afterCommitSpecifier"
            case afterPath = "afterPath"
            case beforeCommitSpecifier = "beforeCommitSpecifier"
            case beforePath = "beforePath"
            case maxResults = "MaxResults"
            case nextToken = "NextToken"
            case repositoryName = "repositoryName"
        }
    }

    public struct GetDifferencesOutput: AWSDecodableShape {
        /// A data type object that contains information about the differences, including whether the difference is added, modified, or deleted (A, D, M).
        public let differences: [Difference]?
        /// An enumeration token that can be used in a request to return the next batch of the results.
        public let nextToken: String?

        @inlinable
        public init(differences: [Difference]? = nil, nextToken: String? = nil) {
            self.differences = differences
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case differences = "differences"
            case nextToken = "NextToken"
        }
    }

    public struct GetFileInput: AWSEncodableShape {
        /// The fully quaified reference that identifies the commit that contains the file. For example, you can specify a full commit ID, a tag, a branch name, or a reference such as refs/heads/main. If none is provided, the head commit is used.
        public let commitSpecifier: String?
        /// The fully qualified path to the file, including the full name and extension of the file. For example, /examples/file.md is the fully qualified path to a file named file.md in a folder named examples.
        public let filePath: String
        /// The name of the repository that contains the file.
        public let repositoryName: String

        @inlinable
        public init(commitSpecifier: String? = nil, filePath: String, repositoryName: String) {
            self.commitSpecifier = commitSpecifier
            self.filePath = filePath
            self.repositoryName = repositoryName
        }

        public func validate(name: String) throws {
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case commitSpecifier = "commitSpecifier"
            case filePath = "filePath"
            case repositoryName = "repositoryName"
        }
    }

    public struct GetFileOutput: AWSDecodableShape {
        /// The blob ID of the object that represents the file content.
        public let blobId: String
        /// The full commit ID of the commit that contains the content returned by GetFile.
        public let commitId: String
        /// The base-64 encoded binary data object that represents the content of the file.
        public let fileContent: AWSBase64Data
        /// The extrapolated file mode permissions of the blob. Valid values include strings such as EXECUTABLE and not numeric values.  The file mode permissions returned by this API are not the standard file mode permission values, such as 100644, but rather extrapolated values. See the supported return values.
        public let fileMode: FileModeTypeEnum
        /// The fully qualified path to the specified file. Returns the name and extension of the file.
        public let filePath: String
        /// The size of the contents of the file, in bytes.
        public let fileSize: Int64

        @inlinable
        public init(blobId: String, commitId: String, fileContent: AWSBase64Data, fileMode: FileModeTypeEnum, filePath: String, fileSize: Int64) {
            self.blobId = blobId
            self.commitId = commitId
            self.fileContent = fileContent
            self.fileMode = fileMode
            self.filePath = filePath
            self.fileSize = fileSize
        }

        private enum CodingKeys: String, CodingKey {
            case blobId = "blobId"
            case commitId = "commitId"
            case fileContent = "fileContent"
            case fileMode = "fileMode"
            case filePath = "filePath"
            case fileSize = "fileSize"
        }
    }

    public struct GetFolderInput: AWSEncodableShape {
        /// A fully qualified reference used to identify a commit that contains the version of the folder's content to return. A fully qualified reference can be a commit ID, branch name, tag, or reference such as HEAD. If no specifier is provided, the folder content is returned as it exists in the HEAD commit.
        public let commitSpecifier: String?
        /// The fully qualified path to the folder whose contents are returned, including the folder name. For example, /examples is a fully-qualified path to a folder named examples that was created off of the root directory (/) of a repository.
        public let folderPath: String
        /// The name of the repository.
        public let repositoryName: String

        @inlinable
        public init(commitSpecifier: String? = nil, folderPath: String, repositoryName: String) {
            self.commitSpecifier = commitSpecifier
            self.folderPath = folderPath
            self.repositoryName = repositoryName
        }

        public func validate(name: String) throws {
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case commitSpecifier = "commitSpecifier"
            case folderPath = "folderPath"
            case repositoryName = "repositoryName"
        }
    }

    public struct GetFolderOutput: AWSDecodableShape {
        /// The full commit ID used as a reference for the returned version of the folder content.
        public let commitId: String
        /// The list of files in the specified folder, if any.
        public let files: [File]?
        /// The fully qualified path of the folder whose contents are returned.
        public let folderPath: String
        /// The list of folders that exist under the specified folder, if any.
        public let subFolders: [Folder]?
        /// The list of submodules in the specified folder, if any.
        public let subModules: [SubModule]?
        /// The list of symbolic links to other files and folders in the specified folder, if any.
        public let symbolicLinks: [SymbolicLink]?
        /// The full SHA-1 pointer of the tree information for the commit that contains the folder.
        public let treeId: String?

        @inlinable
        public init(commitId: String, files: [File]? = nil, folderPath: String, subFolders: [Folder]? = nil, subModules: [SubModule]? = nil, symbolicLinks: [SymbolicLink]? = nil, treeId: String? = nil) {
            self.commitId = commitId
            self.files = files
            self.folderPath = folderPath
            self.subFolders = subFolders
            self.subModules = subModules
            self.symbolicLinks = symbolicLinks
            self.treeId = treeId
        }

        private enum CodingKeys: String, CodingKey {
            case commitId = "commitId"
            case files = "files"
            case folderPath = "folderPath"
            case subFolders = "subFolders"
            case subModules = "subModules"
            case symbolicLinks = "symbolicLinks"
            case treeId = "treeId"
        }
    }

    public struct GetMergeCommitInput: AWSEncodableShape {
        /// The level of conflict detail to use. If unspecified, the default FILE_LEVEL is used, which returns a not-mergeable result if the same file has differences in both branches. If LINE_LEVEL is specified, a conflict is considered not mergeable if the same file in both branches has differences on the same line.
        public let conflictDetailLevel: ConflictDetailLevelTypeEnum?
        /// Specifies which branch to use when resolving conflicts, or whether to attempt automatically merging two versions of a file. The default is NONE, which requires any conflicts to be resolved manually before the merge operation is successful.
        public let conflictResolutionStrategy: ConflictResolutionStrategyTypeEnum?
        /// The branch, tag, HEAD, or other fully qualified reference used to identify a commit (for example, a branch name or a full commit ID).
        public let destinationCommitSpecifier: String
        /// The name of the repository that contains the merge commit about which you want to get information.
        public let repositoryName: String
        /// The branch, tag, HEAD, or other fully qualified reference used to identify a commit (for example, a branch name or a full commit ID).
        public let sourceCommitSpecifier: String

        @inlinable
        public init(conflictDetailLevel: ConflictDetailLevelTypeEnum? = nil, conflictResolutionStrategy: ConflictResolutionStrategyTypeEnum? = nil, destinationCommitSpecifier: String, repositoryName: String, sourceCommitSpecifier: String) {
            self.conflictDetailLevel = conflictDetailLevel
            self.conflictResolutionStrategy = conflictResolutionStrategy
            self.destinationCommitSpecifier = destinationCommitSpecifier
            self.repositoryName = repositoryName
            self.sourceCommitSpecifier = sourceCommitSpecifier
        }

        public func validate(name: String) throws {
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case conflictDetailLevel = "conflictDetailLevel"
            case conflictResolutionStrategy = "conflictResolutionStrategy"
            case destinationCommitSpecifier = "destinationCommitSpecifier"
            case repositoryName = "repositoryName"
            case sourceCommitSpecifier = "sourceCommitSpecifier"
        }
    }

    public struct GetMergeCommitOutput: AWSDecodableShape {
        /// The commit ID of the merge base.
        public let baseCommitId: String?
        /// The commit ID of the destination commit specifier that was used in the merge evaluation.
        public let destinationCommitId: String?
        /// The commit ID for the merge commit created when the source branch was merged into the destination branch. If the fast-forward merge strategy was used, there is no merge commit.
        public let mergedCommitId: String?
        /// The commit ID of the source commit specifier that was used in the merge evaluation.
        public let sourceCommitId: String?

        @inlinable
        public init(baseCommitId: String? = nil, destinationCommitId: String? = nil, mergedCommitId: String? = nil, sourceCommitId: String? = nil) {
            self.baseCommitId = baseCommitId
            self.destinationCommitId = destinationCommitId
            self.mergedCommitId = mergedCommitId
            self.sourceCommitId = sourceCommitId
        }

        private enum CodingKeys: String, CodingKey {
            case baseCommitId = "baseCommitId"
            case destinationCommitId = "destinationCommitId"
            case mergedCommitId = "mergedCommitId"
            case sourceCommitId = "sourceCommitId"
        }
    }

    public struct GetMergeConflictsInput: AWSEncodableShape {
        /// The level of conflict detail to use. If unspecified, the default FILE_LEVEL is used, which returns a not-mergeable result if the same file has differences in both branches. If LINE_LEVEL is specified, a conflict is considered not mergeable if the same file in both branches has differences on the same line.
        public let conflictDetailLevel: ConflictDetailLevelTypeEnum?
        /// Specifies which branch to use when resolving conflicts, or whether to attempt automatically merging two versions of a file. The default is NONE, which requires any conflicts to be resolved manually before the merge operation is successful.
        public let conflictResolutionStrategy: ConflictResolutionStrategyTypeEnum?
        /// The branch, tag, HEAD, or other fully qualified reference used to identify a commit (for example, a branch name or a full commit ID).
        public let destinationCommitSpecifier: String
        /// The maximum number of files to include in the output.
        public let maxConflictFiles: Int?
        /// The merge option or strategy you want to use to merge the code.
        public let mergeOption: MergeOptionTypeEnum
        /// An enumeration token that, when provided in a request, returns the next batch of the results.
        public let nextToken: String?
        /// The name of the repository where the pull request was created.
        public let repositoryName: String
        /// The branch, tag, HEAD, or other fully qualified reference used to identify a commit (for example, a branch name or a full commit ID).
        public let sourceCommitSpecifier: String

        @inlinable
        public init(conflictDetailLevel: ConflictDetailLevelTypeEnum? = nil, conflictResolutionStrategy: ConflictResolutionStrategyTypeEnum? = nil, destinationCommitSpecifier: String, maxConflictFiles: Int? = nil, mergeOption: MergeOptionTypeEnum, nextToken: String? = nil, repositoryName: String, sourceCommitSpecifier: String) {
            self.conflictDetailLevel = conflictDetailLevel
            self.conflictResolutionStrategy = conflictResolutionStrategy
            self.destinationCommitSpecifier = destinationCommitSpecifier
            self.maxConflictFiles = maxConflictFiles
            self.mergeOption = mergeOption
            self.nextToken = nextToken
            self.repositoryName = repositoryName
            self.sourceCommitSpecifier = sourceCommitSpecifier
        }

        public func validate(name: String) throws {
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case conflictDetailLevel = "conflictDetailLevel"
            case conflictResolutionStrategy = "conflictResolutionStrategy"
            case destinationCommitSpecifier = "destinationCommitSpecifier"
            case maxConflictFiles = "maxConflictFiles"
            case mergeOption = "mergeOption"
            case nextToken = "nextToken"
            case repositoryName = "repositoryName"
            case sourceCommitSpecifier = "sourceCommitSpecifier"
        }
    }

    public struct GetMergeConflictsOutput: AWSDecodableShape {
        /// The commit ID of the merge base.
        public let baseCommitId: String?
        /// A list of metadata for any conflicting files. If the specified merge strategy is FAST_FORWARD_MERGE, this list is always empty.
        public let conflictMetadataList: [ConflictMetadata]
        /// The commit ID of the destination commit specifier that was used in the merge evaluation.
        public let destinationCommitId: String
        /// A Boolean value that indicates whether the code is mergeable by the specified merge option.
        public let mergeable: Bool
        /// An enumeration token that can be used in a request to return the next batch of the results.
        public let nextToken: String?
        /// The commit ID of the source commit specifier that was used in the merge evaluation.
        public let sourceCommitId: String

        @inlinable
        public init(baseCommitId: String? = nil, conflictMetadataList: [ConflictMetadata], destinationCommitId: String, mergeable: Bool, nextToken: String? = nil, sourceCommitId: String) {
            self.baseCommitId = baseCommitId
            self.conflictMetadataList = conflictMetadataList
            self.destinationCommitId = destinationCommitId
            self.mergeable = mergeable
            self.nextToken = nextToken
            self.sourceCommitId = sourceCommitId
        }

        private enum CodingKeys: String, CodingKey {
            case baseCommitId = "baseCommitId"
            case conflictMetadataList = "conflictMetadataList"
            case destinationCommitId = "destinationCommitId"
            case mergeable = "mergeable"
            case nextToken = "nextToken"
            case sourceCommitId = "sourceCommitId"
        }
    }

    public struct GetMergeOptionsInput: AWSEncodableShape {
        /// The level of conflict detail to use. If unspecified, the default FILE_LEVEL is used, which returns a not-mergeable result if the same file has differences in both branches. If LINE_LEVEL is specified, a conflict is considered not mergeable if the same file in both branches has differences on the same line.
        public let conflictDetailLevel: ConflictDetailLevelTypeEnum?
        /// Specifies which branch to use when resolving conflicts, or whether to attempt automatically merging two versions of a file. The default is NONE, which requires any conflicts to be resolved manually before the merge operation is successful.
        public let conflictResolutionStrategy: ConflictResolutionStrategyTypeEnum?
        /// The branch, tag, HEAD, or other fully qualified reference used to identify a commit (for example, a branch name or a full commit ID).
        public let destinationCommitSpecifier: String
        /// The name of the repository that contains the commits about which you want to get merge options.
        public let repositoryName: String
        /// The branch, tag, HEAD, or other fully qualified reference used to identify a commit (for example, a branch name or a full commit ID).
        public let sourceCommitSpecifier: String

        @inlinable
        public init(conflictDetailLevel: ConflictDetailLevelTypeEnum? = nil, conflictResolutionStrategy: ConflictResolutionStrategyTypeEnum? = nil, destinationCommitSpecifier: String, repositoryName: String, sourceCommitSpecifier: String) {
            self.conflictDetailLevel = conflictDetailLevel
            self.conflictResolutionStrategy = conflictResolutionStrategy
            self.destinationCommitSpecifier = destinationCommitSpecifier
            self.repositoryName = repositoryName
            self.sourceCommitSpecifier = sourceCommitSpecifier
        }

        public func validate(name: String) throws {
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case conflictDetailLevel = "conflictDetailLevel"
            case conflictResolutionStrategy = "conflictResolutionStrategy"
            case destinationCommitSpecifier = "destinationCommitSpecifier"
            case repositoryName = "repositoryName"
            case sourceCommitSpecifier = "sourceCommitSpecifier"
        }
    }

    public struct GetMergeOptionsOutput: AWSDecodableShape {
        /// The commit ID of the merge base.
        public let baseCommitId: String
        /// The commit ID of the destination commit specifier that was used in the merge evaluation.
        public let destinationCommitId: String
        /// The merge option or strategy used to merge the code.
        public let mergeOptions: [MergeOptionTypeEnum]
        /// The commit ID of the source commit specifier that was used in the merge evaluation.
        public let sourceCommitId: String

        @inlinable
        public init(baseCommitId: String, destinationCommitId: String, mergeOptions: [MergeOptionTypeEnum], sourceCommitId: String) {
            self.baseCommitId = baseCommitId
            self.destinationCommitId = destinationCommitId
            self.mergeOptions = mergeOptions
            self.sourceCommitId = sourceCommitId
        }

        private enum CodingKeys: String, CodingKey {
            case baseCommitId = "baseCommitId"
            case destinationCommitId = "destinationCommitId"
            case mergeOptions = "mergeOptions"
            case sourceCommitId = "sourceCommitId"
        }
    }

    public struct GetPullRequestApprovalStatesInput: AWSEncodableShape {
        /// The system-generated ID for the pull request.
        public let pullRequestId: String
        /// The system-generated ID for the pull request revision.
        public let revisionId: String

        @inlinable
        public init(pullRequestId: String, revisionId: String) {
            self.pullRequestId = pullRequestId
            self.revisionId = revisionId
        }

        private enum CodingKeys: String, CodingKey {
            case pullRequestId = "pullRequestId"
            case revisionId = "revisionId"
        }
    }

    public struct GetPullRequestApprovalStatesOutput: AWSDecodableShape {
        /// Information about users who have approved the pull request.
        public let approvals: [Approval]?

        @inlinable
        public init(approvals: [Approval]? = nil) {
            self.approvals = approvals
        }

        private enum CodingKeys: String, CodingKey {
            case approvals = "approvals"
        }
    }

    public struct GetPullRequestInput: AWSEncodableShape {
        /// The system-generated ID of the pull request. To get this ID, use ListPullRequests.
        public let pullRequestId: String

        @inlinable
        public init(pullRequestId: String) {
            self.pullRequestId = pullRequestId
        }

        private enum CodingKeys: String, CodingKey {
            case pullRequestId = "pullRequestId"
        }
    }

    public struct GetPullRequestOutput: AWSDecodableShape {
        /// Information about the specified pull request.
        public let pullRequest: PullRequest

        @inlinable
        public init(pullRequest: PullRequest) {
            self.pullRequest = pullRequest
        }

        private enum CodingKeys: String, CodingKey {
            case pullRequest = "pullRequest"
        }
    }

    public struct GetPullRequestOverrideStateInput: AWSEncodableShape {
        /// The ID of the pull request for which you want to get information about whether approval rules have been set aside (overridden).
        public let pullRequestId: String
        /// The system-generated ID of the revision for the pull request. To retrieve the most recent revision ID, use GetPullRequest.
        public let revisionId: String

        @inlinable
        public init(pullRequestId: String, revisionId: String) {
            self.pullRequestId = pullRequestId
            self.revisionId = revisionId
        }

        private enum CodingKeys: String, CodingKey {
            case pullRequestId = "pullRequestId"
            case revisionId = "revisionId"
        }
    }

    public struct GetPullRequestOverrideStateOutput: AWSDecodableShape {
        /// A Boolean value that indicates whether a pull request has had its rules set aside (TRUE) or whether all approval rules still apply (FALSE).
        public let overridden: Bool?
        /// The Amazon Resource Name (ARN) of the user or identity that overrode the rules and their requirements for the pull request.
        public let overrider: String?

        @inlinable
        public init(overridden: Bool? = nil, overrider: String? = nil) {
            self.overridden = overridden
            self.overrider = overrider
        }

        private enum CodingKeys: String, CodingKey {
            case overridden = "overridden"
            case overrider = "overrider"
        }
    }

    public struct GetRepositoryInput: AWSEncodableShape {
        /// The name of the repository to get information about.
        public let repositoryName: String

        @inlinable
        public init(repositoryName: String) {
            self.repositoryName = repositoryName
        }

        public func validate(name: String) throws {
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case repositoryName = "repositoryName"
        }
    }

    public struct GetRepositoryOutput: AWSDecodableShape {
        /// Information about the repository.
        public let repositoryMetadata: RepositoryMetadata?

        @inlinable
        public init(repositoryMetadata: RepositoryMetadata? = nil) {
            self.repositoryMetadata = repositoryMetadata
        }

        private enum CodingKeys: String, CodingKey {
            case repositoryMetadata = "repositoryMetadata"
        }
    }

    public struct GetRepositoryTriggersInput: AWSEncodableShape {
        /// The name of the repository for which the trigger is configured.
        public let repositoryName: String

        @inlinable
        public init(repositoryName: String) {
            self.repositoryName = repositoryName
        }

        public func validate(name: String) throws {
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case repositoryName = "repositoryName"
        }
    }

    public struct GetRepositoryTriggersOutput: AWSDecodableShape {
        /// The system-generated unique ID for the trigger.
        public let configurationId: String?
        /// The JSON block of configuration information for each trigger.
        public let triggers: [RepositoryTrigger]?

        @inlinable
        public init(configurationId: String? = nil, triggers: [RepositoryTrigger]? = nil) {
            self.configurationId = configurationId
            self.triggers = triggers
        }

        private enum CodingKeys: String, CodingKey {
            case configurationId = "configurationId"
            case triggers = "triggers"
        }
    }

    public struct IsBinaryFile: AWSDecodableShape {
        /// The binary or non-binary status of a file in the base of a merge or pull request.
        public let base: Bool?
        /// The binary or non-binary status of a file in the destination of a merge or pull request.
        public let destination: Bool?
        /// The binary or non-binary status of file in the source of a merge or pull request.
        public let source: Bool?

        @inlinable
        public init(base: Bool? = nil, destination: Bool? = nil, source: Bool? = nil) {
            self.base = base
            self.destination = destination
            self.source = source
        }

        private enum CodingKeys: String, CodingKey {
            case base = "base"
            case destination = "destination"
            case source = "source"
        }
    }

    public struct ListApprovalRuleTemplatesInput: AWSEncodableShape {
        /// A non-zero, non-negative integer used to limit the number of returned results.
        public let maxResults: Int?
        /// An enumeration token that, when provided in a request, returns the next batch of the results.
        public let nextToken: String?

        @inlinable
        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case maxResults = "maxResults"
            case nextToken = "nextToken"
        }
    }

    public struct ListApprovalRuleTemplatesOutput: AWSDecodableShape {
        /// The names of all the approval rule templates found in the Amazon Web Services Region for your Amazon Web Services account.
        public let approvalRuleTemplateNames: [String]?
        /// An enumeration token that allows the operation to batch the next results of the operation.
        public let nextToken: String?

        @inlinable
        public init(approvalRuleTemplateNames: [String]? = nil, nextToken: String? = nil) {
            self.approvalRuleTemplateNames = approvalRuleTemplateNames
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case approvalRuleTemplateNames = "approvalRuleTemplateNames"
            case nextToken = "nextToken"
        }
    }

    public struct ListAssociatedApprovalRuleTemplatesForRepositoryInput: AWSEncodableShape {
        /// A non-zero, non-negative integer used to limit the number of returned results.
        public let maxResults: Int?
        /// An enumeration token that, when provided in a request, returns the next batch of the results.
        public let nextToken: String?
        /// The name of the repository for which you want to list all associated approval rule templates.
        public let repositoryName: String

        @inlinable
        public init(maxResults: Int? = nil, nextToken: String? = nil, repositoryName: String) {
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.repositoryName = repositoryName
        }

        public func validate(name: String) throws {
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case maxResults = "maxResults"
            case nextToken = "nextToken"
            case repositoryName = "repositoryName"
        }
    }

    public struct ListAssociatedApprovalRuleTemplatesForRepositoryOutput: AWSDecodableShape {
        /// The names of all approval rule templates associated with the repository.
        public let approvalRuleTemplateNames: [String]?
        /// An enumeration token that allows the operation to batch the next results of the operation.
        public let nextToken: String?

        @inlinable
        public init(approvalRuleTemplateNames: [String]? = nil, nextToken: String? = nil) {
            self.approvalRuleTemplateNames = approvalRuleTemplateNames
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case approvalRuleTemplateNames = "approvalRuleTemplateNames"
            case nextToken = "nextToken"
        }
    }

    public struct ListBranchesInput: AWSEncodableShape {
        /// An enumeration token that allows the operation to batch the results.
        public let nextToken: String?
        /// The name of the repository that contains the branches.
        public let repositoryName: String

        @inlinable
        public init(nextToken: String? = nil, repositoryName: String) {
            self.nextToken = nextToken
            self.repositoryName = repositoryName
        }

        public func validate(name: String) throws {
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "nextToken"
            case repositoryName = "repositoryName"
        }
    }

    public struct ListBranchesOutput: AWSDecodableShape {
        /// The list of branch names.
        public let branches: [String]?
        /// An enumeration token that returns the batch of the results.
        public let nextToken: String?

        @inlinable
        public init(branches: [String]? = nil, nextToken: String? = nil) {
            self.branches = branches
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case branches = "branches"
            case nextToken = "nextToken"
        }
    }

    public struct ListFileCommitHistoryRequest: AWSEncodableShape {
        /// The fully quaified reference that identifies the commit that contains the file. For example, you can specify a full commit ID, a tag, a branch name, or a reference such as refs/heads/main. If none is provided, the head commit is used.
        public let commitSpecifier: String?
        /// The full path of the file whose history you want to retrieve, including the name of the file.
        public let filePath: String
        /// A non-zero, non-negative integer used to limit the number of returned results.
        public let maxResults: Int?
        /// An enumeration token that allows the operation to batch the results.
        public let nextToken: String?
        /// The name of the repository that contains the file.
        public let repositoryName: String

        @inlinable
        public init(commitSpecifier: String? = nil, filePath: String, maxResults: Int? = nil, nextToken: String? = nil, repositoryName: String) {
            self.commitSpecifier = commitSpecifier
            self.filePath = filePath
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.repositoryName = repositoryName
        }

        public func validate(name: String) throws {
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case commitSpecifier = "commitSpecifier"
            case filePath = "filePath"
            case maxResults = "maxResults"
            case nextToken = "nextToken"
            case repositoryName = "repositoryName"
        }
    }

    public struct ListFileCommitHistoryResponse: AWSDecodableShape {
        /// An enumeration token that can be used to return the next batch of results.
        public let nextToken: String?
        /// An array of FileVersion objects that form a directed acyclic graph (DAG) of the changes to the file made by the commits that changed the file.
        public let revisionDag: [FileVersion]

        @inlinable
        public init(nextToken: String? = nil, revisionDag: [FileVersion]) {
            self.nextToken = nextToken
            self.revisionDag = revisionDag
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "nextToken"
            case revisionDag = "revisionDag"
        }
    }

    public struct ListPullRequestsInput: AWSEncodableShape {
        /// Optional. The Amazon Resource Name (ARN) of the user who created the pull request. If used, this filters the results  to pull requests created by that user.
        public let authorArn: String?
        /// A non-zero, non-negative integer used to limit the number of returned results.
        public let maxResults: Int?
        /// An enumeration token that, when provided in a request, returns the next batch of the results.
        public let nextToken: String?
        /// Optional. The status of the pull request. If used, this refines the results to the pull requests that match the specified status.
        public let pullRequestStatus: PullRequestStatusEnum?
        /// The name of the repository for which you want to list pull requests.
        public let repositoryName: String

        @inlinable
        public init(authorArn: String? = nil, maxResults: Int? = nil, nextToken: String? = nil, pullRequestStatus: PullRequestStatusEnum? = nil, repositoryName: String) {
            self.authorArn = authorArn
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.pullRequestStatus = pullRequestStatus
            self.repositoryName = repositoryName
        }

        public func validate(name: String) throws {
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case authorArn = "authorArn"
            case maxResults = "maxResults"
            case nextToken = "nextToken"
            case pullRequestStatus = "pullRequestStatus"
            case repositoryName = "repositoryName"
        }
    }

    public struct ListPullRequestsOutput: AWSDecodableShape {
        /// An enumeration token that allows the operation to batch the next results of the operation.
        public let nextToken: String?
        /// The system-generated IDs of the pull requests.
        public let pullRequestIds: [String]

        @inlinable
        public init(nextToken: String? = nil, pullRequestIds: [String]) {
            self.nextToken = nextToken
            self.pullRequestIds = pullRequestIds
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "nextToken"
            case pullRequestIds = "pullRequestIds"
        }
    }

    public struct ListRepositoriesForApprovalRuleTemplateInput: AWSEncodableShape {
        /// The name of the approval rule template for which you want to list repositories that are associated with that template.
        public let approvalRuleTemplateName: String
        /// A non-zero, non-negative integer used to limit the number of returned results.
        public let maxResults: Int?
        /// An enumeration token that, when provided in a request, returns the next batch of the results.
        public let nextToken: String?

        @inlinable
        public init(approvalRuleTemplateName: String, maxResults: Int? = nil, nextToken: String? = nil) {
            self.approvalRuleTemplateName = approvalRuleTemplateName
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.approvalRuleTemplateName, name: "approvalRuleTemplateName", parent: name, max: 100)
            try self.validate(self.approvalRuleTemplateName, name: "approvalRuleTemplateName", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case approvalRuleTemplateName = "approvalRuleTemplateName"
            case maxResults = "maxResults"
            case nextToken = "nextToken"
        }
    }

    public struct ListRepositoriesForApprovalRuleTemplateOutput: AWSDecodableShape {
        /// An enumeration token that allows the operation to batch the next results of the operation.
        public let nextToken: String?
        /// A list of repository names that are associated with the specified approval rule template.
        public let repositoryNames: [String]?

        @inlinable
        public init(nextToken: String? = nil, repositoryNames: [String]? = nil) {
            self.nextToken = nextToken
            self.repositoryNames = repositoryNames
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "nextToken"
            case repositoryNames = "repositoryNames"
        }
    }

    public struct ListRepositoriesInput: AWSEncodableShape {
        /// An enumeration token that allows the operation to batch the results of the operation.  Batch sizes are 1,000 for list repository operations. When the client sends the token back to CodeCommit, another page of 1,000 records is retrieved.
        public let nextToken: String?
        /// The order in which to sort the results of a list repositories operation.
        public let order: OrderEnum?
        /// The criteria used to sort the results of a list repositories operation.
        public let sortBy: SortByEnum?

        @inlinable
        public init(nextToken: String? = nil, order: OrderEnum? = nil, sortBy: SortByEnum? = nil) {
            self.nextToken = nextToken
            self.order = order
            self.sortBy = sortBy
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "nextToken"
            case order = "order"
            case sortBy = "sortBy"
        }
    }

    public struct ListRepositoriesOutput: AWSDecodableShape {
        /// An enumeration token that allows the operation to batch the results of the operation.  Batch sizes are 1,000 for list repository operations. When the client sends the token back to CodeCommit,  another page of 1,000 records is retrieved.
        public let nextToken: String?
        /// Lists the repositories called by the list repositories operation.
        public let repositories: [RepositoryNameIdPair]?

        @inlinable
        public init(nextToken: String? = nil, repositories: [RepositoryNameIdPair]? = nil) {
            self.nextToken = nextToken
            self.repositories = repositories
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "nextToken"
            case repositories = "repositories"
        }
    }

    public struct ListTagsForResourceInput: AWSEncodableShape {
        /// An enumeration token that, when provided in a request, returns the next batch of the results.
        public let nextToken: String?
        /// The Amazon Resource Name (ARN) of the resource for which you want to get information about tags, if any.
        public let resourceArn: String

        @inlinable
        public init(nextToken: String? = nil, resourceArn: String) {
            self.nextToken = nextToken
            self.resourceArn = resourceArn
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "nextToken"
            case resourceArn = "resourceArn"
        }
    }

    public struct ListTagsForResourceOutput: AWSDecodableShape {
        /// An enumeration token that allows the operation to batch the next results of the operation.
        public let nextToken: String?
        /// A list of tag key and value pairs associated with the specified resource.
        public let tags: [String: String]?

        @inlinable
        public init(nextToken: String? = nil, tags: [String: String]? = nil) {
            self.nextToken = nextToken
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "nextToken"
            case tags = "tags"
        }
    }

    public struct Location: AWSEncodableShape & AWSDecodableShape {
        /// The name of the file being compared, including its extension and subdirectory, if any.
        public let filePath: String?
        /// The position of a change in a compared file, in line number format.
        public let filePosition: Int64?
        /// In a comparison of commits or a pull request, whether the change is in the before or after of that comparison.
        public let relativeFileVersion: RelativeFileVersionEnum?

        @inlinable
        public init(filePath: String? = nil, filePosition: Int64? = nil, relativeFileVersion: RelativeFileVersionEnum? = nil) {
            self.filePath = filePath
            self.filePosition = filePosition
            self.relativeFileVersion = relativeFileVersion
        }

        private enum CodingKeys: String, CodingKey {
            case filePath = "filePath"
            case filePosition = "filePosition"
            case relativeFileVersion = "relativeFileVersion"
        }
    }

    public struct MergeBranchesByFastForwardInput: AWSEncodableShape {
        /// The branch, tag, HEAD, or other fully qualified reference used to identify a commit (for example, a branch name or a full commit ID).
        public let destinationCommitSpecifier: String
        /// The name of the repository where you want to merge two branches.
        public let repositoryName: String
        /// The branch, tag, HEAD, or other fully qualified reference used to identify a commit (for example, a branch name or a full commit ID).
        public let sourceCommitSpecifier: String
        /// The branch where the merge is applied.
        public let targetBranch: String?

        @inlinable
        public init(destinationCommitSpecifier: String, repositoryName: String, sourceCommitSpecifier: String, targetBranch: String? = nil) {
            self.destinationCommitSpecifier = destinationCommitSpecifier
            self.repositoryName = repositoryName
            self.sourceCommitSpecifier = sourceCommitSpecifier
            self.targetBranch = targetBranch
        }

        public func validate(name: String) throws {
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
            try self.validate(self.targetBranch, name: "targetBranch", parent: name, max: 256)
            try self.validate(self.targetBranch, name: "targetBranch", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case destinationCommitSpecifier = "destinationCommitSpecifier"
            case repositoryName = "repositoryName"
            case sourceCommitSpecifier = "sourceCommitSpecifier"
            case targetBranch = "targetBranch"
        }
    }

    public struct MergeBranchesByFastForwardOutput: AWSDecodableShape {
        /// The commit ID of the merge in the destination or target branch.
        public let commitId: String?
        /// The tree ID of the merge in the destination or target branch.
        public let treeId: String?

        @inlinable
        public init(commitId: String? = nil, treeId: String? = nil) {
            self.commitId = commitId
            self.treeId = treeId
        }

        private enum CodingKeys: String, CodingKey {
            case commitId = "commitId"
            case treeId = "treeId"
        }
    }

    public struct MergeBranchesBySquashInput: AWSEncodableShape {
        /// The name of the author who created the commit. This information is used as both the author and committer for the commit.
        public let authorName: String?
        /// The commit message for the merge.
        public let commitMessage: String?
        /// The level of conflict detail to use. If unspecified, the default FILE_LEVEL is used, which returns a not-mergeable result if the same file has differences in both branches. If LINE_LEVEL is specified, a conflict is considered not mergeable if the same file in both branches has differences on the same line.
        public let conflictDetailLevel: ConflictDetailLevelTypeEnum?
        /// If AUTOMERGE is the conflict resolution strategy, a list of inputs to use when resolving conflicts during a merge.
        public let conflictResolution: ConflictResolution?
        /// Specifies which branch to use when resolving conflicts, or whether to attempt automatically merging two versions of a file. The default is NONE, which requires any conflicts to be resolved manually before the merge operation is successful.
        public let conflictResolutionStrategy: ConflictResolutionStrategyTypeEnum?
        /// The branch, tag, HEAD, or other fully qualified reference used to identify a commit (for example, a branch name or a full commit ID).
        public let destinationCommitSpecifier: String
        /// The email address of the person merging the branches. This information is used in the commit information for the merge.
        public let email: String?
        /// If the commit contains deletions, whether to keep a folder or folder structure if the changes leave the folders empty. If this is specified as true, a .gitkeep file is created for empty folders. The default is false.
        public let keepEmptyFolders: Bool?
        /// The name of the repository where you want to merge two branches.
        public let repositoryName: String
        /// The branch, tag, HEAD, or other fully qualified reference used to identify a commit (for example, a branch name or a full commit ID).
        public let sourceCommitSpecifier: String
        /// The branch where the merge is applied.
        public let targetBranch: String?

        @inlinable
        public init(authorName: String? = nil, commitMessage: String? = nil, conflictDetailLevel: ConflictDetailLevelTypeEnum? = nil, conflictResolution: ConflictResolution? = nil, conflictResolutionStrategy: ConflictResolutionStrategyTypeEnum? = nil, destinationCommitSpecifier: String, email: String? = nil, keepEmptyFolders: Bool? = nil, repositoryName: String, sourceCommitSpecifier: String, targetBranch: String? = nil) {
            self.authorName = authorName
            self.commitMessage = commitMessage
            self.conflictDetailLevel = conflictDetailLevel
            self.conflictResolution = conflictResolution
            self.conflictResolutionStrategy = conflictResolutionStrategy
            self.destinationCommitSpecifier = destinationCommitSpecifier
            self.email = email
            self.keepEmptyFolders = keepEmptyFolders
            self.repositoryName = repositoryName
            self.sourceCommitSpecifier = sourceCommitSpecifier
            self.targetBranch = targetBranch
        }

        public func validate(name: String) throws {
            try self.conflictResolution?.validate(name: "\(name).conflictResolution")
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
            try self.validate(self.targetBranch, name: "targetBranch", parent: name, max: 256)
            try self.validate(self.targetBranch, name: "targetBranch", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case authorName = "authorName"
            case commitMessage = "commitMessage"
            case conflictDetailLevel = "conflictDetailLevel"
            case conflictResolution = "conflictResolution"
            case conflictResolutionStrategy = "conflictResolutionStrategy"
            case destinationCommitSpecifier = "destinationCommitSpecifier"
            case email = "email"
            case keepEmptyFolders = "keepEmptyFolders"
            case repositoryName = "repositoryName"
            case sourceCommitSpecifier = "sourceCommitSpecifier"
            case targetBranch = "targetBranch"
        }
    }

    public struct MergeBranchesBySquashOutput: AWSDecodableShape {
        /// The commit ID of the merge in the destination or target branch.
        public let commitId: String?
        /// The tree ID of the merge in the destination or target branch.
        public let treeId: String?

        @inlinable
        public init(commitId: String? = nil, treeId: String? = nil) {
            self.commitId = commitId
            self.treeId = treeId
        }

        private enum CodingKeys: String, CodingKey {
            case commitId = "commitId"
            case treeId = "treeId"
        }
    }

    public struct MergeBranchesByThreeWayInput: AWSEncodableShape {
        /// The name of the author who created the commit. This information is used as both the author and committer for the commit.
        public let authorName: String?
        /// The commit message to include in the commit information for the merge.
        public let commitMessage: String?
        /// The level of conflict detail to use. If unspecified, the default FILE_LEVEL is used, which returns a not-mergeable result if the same file has differences in both branches. If LINE_LEVEL is specified, a conflict is considered not mergeable if the same file in both branches has differences on the same line.
        public let conflictDetailLevel: ConflictDetailLevelTypeEnum?
        /// If AUTOMERGE is the conflict resolution strategy, a list of inputs to use when resolving conflicts during a merge.
        public let conflictResolution: ConflictResolution?
        /// Specifies which branch to use when resolving conflicts, or whether to attempt automatically merging two versions of a file. The default is NONE, which requires any conflicts to be resolved manually before the merge operation is successful.
        public let conflictResolutionStrategy: ConflictResolutionStrategyTypeEnum?
        /// The branch, tag, HEAD, or other fully qualified reference used to identify a commit (for example, a branch name or a full commit ID).
        public let destinationCommitSpecifier: String
        /// The email address of the person merging the branches. This information is used in the commit information for the merge.
        public let email: String?
        /// If the commit contains deletions, whether to keep a folder or folder structure if the changes leave the folders empty. If true, a .gitkeep file is created for empty folders. The default is false.
        public let keepEmptyFolders: Bool?
        /// The name of the repository where you want to merge two branches.
        public let repositoryName: String
        /// The branch, tag, HEAD, or other fully qualified reference used to identify a commit (for example, a branch name or a full commit ID).
        public let sourceCommitSpecifier: String
        /// The branch where the merge is applied.
        public let targetBranch: String?

        @inlinable
        public init(authorName: String? = nil, commitMessage: String? = nil, conflictDetailLevel: ConflictDetailLevelTypeEnum? = nil, conflictResolution: ConflictResolution? = nil, conflictResolutionStrategy: ConflictResolutionStrategyTypeEnum? = nil, destinationCommitSpecifier: String, email: String? = nil, keepEmptyFolders: Bool? = nil, repositoryName: String, sourceCommitSpecifier: String, targetBranch: String? = nil) {
            self.authorName = authorName
            self.commitMessage = commitMessage
            self.conflictDetailLevel = conflictDetailLevel
            self.conflictResolution = conflictResolution
            self.conflictResolutionStrategy = conflictResolutionStrategy
            self.destinationCommitSpecifier = destinationCommitSpecifier
            self.email = email
            self.keepEmptyFolders = keepEmptyFolders
            self.repositoryName = repositoryName
            self.sourceCommitSpecifier = sourceCommitSpecifier
            self.targetBranch = targetBranch
        }

        public func validate(name: String) throws {
            try self.conflictResolution?.validate(name: "\(name).conflictResolution")
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
            try self.validate(self.targetBranch, name: "targetBranch", parent: name, max: 256)
            try self.validate(self.targetBranch, name: "targetBranch", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case authorName = "authorName"
            case commitMessage = "commitMessage"
            case conflictDetailLevel = "conflictDetailLevel"
            case conflictResolution = "conflictResolution"
            case conflictResolutionStrategy = "conflictResolutionStrategy"
            case destinationCommitSpecifier = "destinationCommitSpecifier"
            case email = "email"
            case keepEmptyFolders = "keepEmptyFolders"
            case repositoryName = "repositoryName"
            case sourceCommitSpecifier = "sourceCommitSpecifier"
            case targetBranch = "targetBranch"
        }
    }

    public struct MergeBranchesByThreeWayOutput: AWSDecodableShape {
        /// The commit ID of the merge in the destination or target branch.
        public let commitId: String?
        /// The tree ID of the merge in the destination or target branch.
        public let treeId: String?

        @inlinable
        public init(commitId: String? = nil, treeId: String? = nil) {
            self.commitId = commitId
            self.treeId = treeId
        }

        private enum CodingKeys: String, CodingKey {
            case commitId = "commitId"
            case treeId = "treeId"
        }
    }

    public struct MergeHunk: AWSDecodableShape {
        /// Information about the merge hunk in the base of a merge or pull request.
        public let base: MergeHunkDetail?
        /// Information about the merge hunk in the destination of a merge or pull request.
        public let destination: MergeHunkDetail?
        /// A Boolean value indicating whether a combination of hunks contains a conflict. Conflicts occur when the same file or the same lines in a file were modified in both the source and destination of a merge or pull request. Valid values include true, false, and null. True when the hunk represents a conflict and one or more files contains a line conflict. File mode conflicts in a merge do not set this to true.
        public let isConflict: Bool?
        /// Information about the merge hunk in the source of a merge or pull request.
        public let source: MergeHunkDetail?

        @inlinable
        public init(base: MergeHunkDetail? = nil, destination: MergeHunkDetail? = nil, isConflict: Bool? = nil, source: MergeHunkDetail? = nil) {
            self.base = base
            self.destination = destination
            self.isConflict = isConflict
            self.source = source
        }

        private enum CodingKeys: String, CodingKey {
            case base = "base"
            case destination = "destination"
            case isConflict = "isConflict"
            case source = "source"
        }
    }

    public struct MergeHunkDetail: AWSDecodableShape {
        /// The end position of the hunk in the merge result.
        public let endLine: Int?
        /// The base-64 encoded content of the hunk merged region that might contain a conflict.
        public let hunkContent: String?
        /// The start position of the hunk in the merge result.
        public let startLine: Int?

        @inlinable
        public init(endLine: Int? = nil, hunkContent: String? = nil, startLine: Int? = nil) {
            self.endLine = endLine
            self.hunkContent = hunkContent
            self.startLine = startLine
        }

        private enum CodingKeys: String, CodingKey {
            case endLine = "endLine"
            case hunkContent = "hunkContent"
            case startLine = "startLine"
        }
    }

    public struct MergeMetadata: AWSDecodableShape {
        /// A Boolean value indicating whether the merge has been made.
        public let isMerged: Bool?
        /// The commit ID for the merge commit, if any.
        public let mergeCommitId: String?
        /// The Amazon Resource Name (ARN) of the user who merged the branches.
        public let mergedBy: String?
        /// The merge strategy used in the merge.
        public let mergeOption: MergeOptionTypeEnum?

        @inlinable
        public init(isMerged: Bool? = nil, mergeCommitId: String? = nil, mergedBy: String? = nil, mergeOption: MergeOptionTypeEnum? = nil) {
            self.isMerged = isMerged
            self.mergeCommitId = mergeCommitId
            self.mergedBy = mergedBy
            self.mergeOption = mergeOption
        }

        private enum CodingKeys: String, CodingKey {
            case isMerged = "isMerged"
            case mergeCommitId = "mergeCommitId"
            case mergedBy = "mergedBy"
            case mergeOption = "mergeOption"
        }
    }

    public struct MergeOperations: AWSDecodableShape {
        /// The operation on a file in the destination of a merge or pull request.
        public let destination: ChangeTypeEnum?
        /// The operation (add, modify, or delete) on a file in the source of a merge or pull request.
        public let source: ChangeTypeEnum?

        @inlinable
        public init(destination: ChangeTypeEnum? = nil, source: ChangeTypeEnum? = nil) {
            self.destination = destination
            self.source = source
        }

        private enum CodingKeys: String, CodingKey {
            case destination = "destination"
            case source = "source"
        }
    }

    public struct MergePullRequestByFastForwardInput: AWSEncodableShape {
        /// The system-generated ID of the pull request. To get this ID, use ListPullRequests.
        public let pullRequestId: String
        /// The name of the repository where the pull request was created.
        public let repositoryName: String
        /// The full commit ID of the original or updated commit in the pull request source branch. Pass this value if you want an  exception thrown if the current commit ID of the tip of the source branch does not match this commit ID.
        public let sourceCommitId: String?

        @inlinable
        public init(pullRequestId: String, repositoryName: String, sourceCommitId: String? = nil) {
            self.pullRequestId = pullRequestId
            self.repositoryName = repositoryName
            self.sourceCommitId = sourceCommitId
        }

        public func validate(name: String) throws {
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case pullRequestId = "pullRequestId"
            case repositoryName = "repositoryName"
            case sourceCommitId = "sourceCommitId"
        }
    }

    public struct MergePullRequestByFastForwardOutput: AWSDecodableShape {
        /// Information about the specified pull request, including the merge.
        public let pullRequest: PullRequest?

        @inlinable
        public init(pullRequest: PullRequest? = nil) {
            self.pullRequest = pullRequest
        }

        private enum CodingKeys: String, CodingKey {
            case pullRequest = "pullRequest"
        }
    }

    public struct MergePullRequestBySquashInput: AWSEncodableShape {
        /// The name of the author who created the commit. This information is used as both the author and committer for the commit.
        public let authorName: String?
        /// The commit message to include in the commit information for the merge.
        public let commitMessage: String?
        /// The level of conflict detail to use. If unspecified, the default FILE_LEVEL is used, which returns a not-mergeable result if the same file has differences in both branches. If LINE_LEVEL is specified, a conflict is considered not mergeable if the same file in both branches has differences on the same line.
        public let conflictDetailLevel: ConflictDetailLevelTypeEnum?
        /// If AUTOMERGE is the conflict resolution strategy, a list of inputs to use when resolving conflicts during a merge.
        public let conflictResolution: ConflictResolution?
        /// Specifies which branch to use when resolving conflicts, or whether to attempt automatically merging two versions of a file. The default is NONE, which requires any conflicts to be resolved manually before the merge operation is successful.
        public let conflictResolutionStrategy: ConflictResolutionStrategyTypeEnum?
        /// The email address of the person merging the branches. This information is used in the commit information for the merge.
        public let email: String?
        /// If the commit contains deletions, whether to keep a folder or folder structure if the changes leave the folders empty. If true, a .gitkeep file is created for empty folders. The default is false.
        public let keepEmptyFolders: Bool?
        /// The system-generated ID of the pull request. To get this ID, use ListPullRequests.
        public let pullRequestId: String
        /// The name of the repository where the pull request was created.
        public let repositoryName: String
        /// The full commit ID of the original or updated commit in the pull request source branch. Pass this value if you want an  exception thrown if the current commit ID of the tip of the source branch does not match this commit ID.
        public let sourceCommitId: String?

        @inlinable
        public init(authorName: String? = nil, commitMessage: String? = nil, conflictDetailLevel: ConflictDetailLevelTypeEnum? = nil, conflictResolution: ConflictResolution? = nil, conflictResolutionStrategy: ConflictResolutionStrategyTypeEnum? = nil, email: String? = nil, keepEmptyFolders: Bool? = nil, pullRequestId: String, repositoryName: String, sourceCommitId: String? = nil) {
            self.authorName = authorName
            self.commitMessage = commitMessage
            self.conflictDetailLevel = conflictDetailLevel
            self.conflictResolution = conflictResolution
            self.conflictResolutionStrategy = conflictResolutionStrategy
            self.email = email
            self.keepEmptyFolders = keepEmptyFolders
            self.pullRequestId = pullRequestId
            self.repositoryName = repositoryName
            self.sourceCommitId = sourceCommitId
        }

        public func validate(name: String) throws {
            try self.conflictResolution?.validate(name: "\(name).conflictResolution")
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case authorName = "authorName"
            case commitMessage = "commitMessage"
            case conflictDetailLevel = "conflictDetailLevel"
            case conflictResolution = "conflictResolution"
            case conflictResolutionStrategy = "conflictResolutionStrategy"
            case email = "email"
            case keepEmptyFolders = "keepEmptyFolders"
            case pullRequestId = "pullRequestId"
            case repositoryName = "repositoryName"
            case sourceCommitId = "sourceCommitId"
        }
    }

    public struct MergePullRequestBySquashOutput: AWSDecodableShape {
        public let pullRequest: PullRequest?

        @inlinable
        public init(pullRequest: PullRequest? = nil) {
            self.pullRequest = pullRequest
        }

        private enum CodingKeys: String, CodingKey {
            case pullRequest = "pullRequest"
        }
    }

    public struct MergePullRequestByThreeWayInput: AWSEncodableShape {
        /// The name of the author who created the commit. This information is used as both the author and committer for the commit.
        public let authorName: String?
        /// The commit message to include in the commit information for the merge.
        public let commitMessage: String?
        /// The level of conflict detail to use. If unspecified, the default FILE_LEVEL is used, which returns a not-mergeable result if the same file has differences in both branches. If LINE_LEVEL is specified, a conflict is considered not mergeable if the same file in both branches has differences on the same line.
        public let conflictDetailLevel: ConflictDetailLevelTypeEnum?
        /// If AUTOMERGE is the conflict resolution strategy, a list of inputs to use when resolving conflicts during a merge.
        public let conflictResolution: ConflictResolution?
        /// Specifies which branch to use when resolving conflicts, or whether to attempt automatically merging two versions of a file. The default is NONE, which requires any conflicts to be resolved manually before the merge operation is successful.
        public let conflictResolutionStrategy: ConflictResolutionStrategyTypeEnum?
        /// The email address of the person merging the branches. This information is used in the commit information for the merge.
        public let email: String?
        /// If the commit contains deletions, whether to keep a folder or folder structure if the changes leave the folders empty. If true, a .gitkeep file is created for empty folders. The default is false.
        public let keepEmptyFolders: Bool?
        /// The system-generated ID of the pull request. To get this ID, use ListPullRequests.
        public let pullRequestId: String
        /// The name of the repository where the pull request was created.
        public let repositoryName: String
        /// The full commit ID of the original or updated commit in the pull request source branch. Pass this value if you want an  exception thrown if the current commit ID of the tip of the source branch does not match this commit ID.
        public let sourceCommitId: String?

        @inlinable
        public init(authorName: String? = nil, commitMessage: String? = nil, conflictDetailLevel: ConflictDetailLevelTypeEnum? = nil, conflictResolution: ConflictResolution? = nil, conflictResolutionStrategy: ConflictResolutionStrategyTypeEnum? = nil, email: String? = nil, keepEmptyFolders: Bool? = nil, pullRequestId: String, repositoryName: String, sourceCommitId: String? = nil) {
            self.authorName = authorName
            self.commitMessage = commitMessage
            self.conflictDetailLevel = conflictDetailLevel
            self.conflictResolution = conflictResolution
            self.conflictResolutionStrategy = conflictResolutionStrategy
            self.email = email
            self.keepEmptyFolders = keepEmptyFolders
            self.pullRequestId = pullRequestId
            self.repositoryName = repositoryName
            self.sourceCommitId = sourceCommitId
        }

        public func validate(name: String) throws {
            try self.conflictResolution?.validate(name: "\(name).conflictResolution")
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case authorName = "authorName"
            case commitMessage = "commitMessage"
            case conflictDetailLevel = "conflictDetailLevel"
            case conflictResolution = "conflictResolution"
            case conflictResolutionStrategy = "conflictResolutionStrategy"
            case email = "email"
            case keepEmptyFolders = "keepEmptyFolders"
            case pullRequestId = "pullRequestId"
            case repositoryName = "repositoryName"
            case sourceCommitId = "sourceCommitId"
        }
    }

    public struct MergePullRequestByThreeWayOutput: AWSDecodableShape {
        public let pullRequest: PullRequest?

        @inlinable
        public init(pullRequest: PullRequest? = nil) {
            self.pullRequest = pullRequest
        }

        private enum CodingKeys: String, CodingKey {
            case pullRequest = "pullRequest"
        }
    }

    public struct ObjectTypes: AWSDecodableShape {
        /// The type of the object in the base commit of the merge.
        public let base: ObjectTypeEnum?
        /// The type of the object in the destination branch.
        public let destination: ObjectTypeEnum?
        /// The type of the object in the source branch.
        public let source: ObjectTypeEnum?

        @inlinable
        public init(base: ObjectTypeEnum? = nil, destination: ObjectTypeEnum? = nil, source: ObjectTypeEnum? = nil) {
            self.base = base
            self.destination = destination
            self.source = source
        }

        private enum CodingKeys: String, CodingKey {
            case base = "base"
            case destination = "destination"
            case source = "source"
        }
    }

    public struct OriginApprovalRuleTemplate: AWSDecodableShape {
        /// The ID of the template that created the approval rule.
        public let approvalRuleTemplateId: String?
        /// The name of the template that created the approval rule.
        public let approvalRuleTemplateName: String?

        @inlinable
        public init(approvalRuleTemplateId: String? = nil, approvalRuleTemplateName: String? = nil) {
            self.approvalRuleTemplateId = approvalRuleTemplateId
            self.approvalRuleTemplateName = approvalRuleTemplateName
        }

        private enum CodingKeys: String, CodingKey {
            case approvalRuleTemplateId = "approvalRuleTemplateId"
            case approvalRuleTemplateName = "approvalRuleTemplateName"
        }
    }

    public struct OverridePullRequestApprovalRulesInput: AWSEncodableShape {
        /// Whether you want to set aside approval rule requirements for the pull request (OVERRIDE) or revoke a previous override and apply  approval rule requirements (REVOKE). REVOKE status is not stored.
        public let overrideStatus: OverrideStatus
        /// The system-generated ID of the pull request for which you want to override all approval rule requirements. To get this information, use GetPullRequest.
        public let pullRequestId: String
        /// The system-generated ID of the most recent revision of the pull request. You cannot override approval rules for anything but the most recent revision of a pull request. To get the revision ID, use GetPullRequest.
        public let revisionId: String

        @inlinable
        public init(overrideStatus: OverrideStatus, pullRequestId: String, revisionId: String) {
            self.overrideStatus = overrideStatus
            self.pullRequestId = pullRequestId
            self.revisionId = revisionId
        }

        private enum CodingKeys: String, CodingKey {
            case overrideStatus = "overrideStatus"
            case pullRequestId = "pullRequestId"
            case revisionId = "revisionId"
        }
    }

    public struct PostCommentForComparedCommitInput: AWSEncodableShape {
        /// To establish the directionality of the comparison, the full commit ID of the after commit.
        public let afterCommitId: String
        /// To establish the directionality of the comparison, the full commit ID of the before commit. Required for commenting on any commit unless that commit is the initial commit.
        public let beforeCommitId: String?
        /// A unique, client-generated idempotency token that, when provided in a request, ensures the request cannot be repeated with a changed parameter. If a request is received with the same parameters and a token is included, the request returns information about the initial request that used that token.
        public let clientRequestToken: String?
        /// The content of the comment you want to make.
        public let content: String
        /// The location of the comparison where you want to comment.
        public let location: Location?
        /// The name of the repository where you want to post a comment on the comparison between commits.
        public let repositoryName: String

        @inlinable
        public init(afterCommitId: String, beforeCommitId: String? = nil, clientRequestToken: String? = PostCommentForComparedCommitInput.idempotencyToken(), content: String, location: Location? = nil, repositoryName: String) {
            self.afterCommitId = afterCommitId
            self.beforeCommitId = beforeCommitId
            self.clientRequestToken = clientRequestToken
            self.content = content
            self.location = location
            self.repositoryName = repositoryName
        }

        public func validate(name: String) throws {
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case afterCommitId = "afterCommitId"
            case beforeCommitId = "beforeCommitId"
            case clientRequestToken = "clientRequestToken"
            case content = "content"
            case location = "location"
            case repositoryName = "repositoryName"
        }
    }

    public struct PostCommentForComparedCommitOutput: AWSDecodableShape {
        /// In the directionality you established, the blob ID of the after blob.
        public let afterBlobId: String?
        /// In the directionality you established, the full commit ID of the after commit.
        public let afterCommitId: String?
        /// In the directionality you established, the blob ID of the before blob.
        public let beforeBlobId: String?
        /// In the directionality you established, the full commit ID of the before commit.
        public let beforeCommitId: String?
        /// The content of the comment you posted.
        public let comment: Comment?
        /// The location of the comment in the comparison between the two commits.
        public let location: Location?
        /// The name of the repository where you posted a comment on the comparison between commits.
        public let repositoryName: String?

        @inlinable
        public init(afterBlobId: String? = nil, afterCommitId: String? = nil, beforeBlobId: String? = nil, beforeCommitId: String? = nil, comment: Comment? = nil, location: Location? = nil, repositoryName: String? = nil) {
            self.afterBlobId = afterBlobId
            self.afterCommitId = afterCommitId
            self.beforeBlobId = beforeBlobId
            self.beforeCommitId = beforeCommitId
            self.comment = comment
            self.location = location
            self.repositoryName = repositoryName
        }

        private enum CodingKeys: String, CodingKey {
            case afterBlobId = "afterBlobId"
            case afterCommitId = "afterCommitId"
            case beforeBlobId = "beforeBlobId"
            case beforeCommitId = "beforeCommitId"
            case comment = "comment"
            case location = "location"
            case repositoryName = "repositoryName"
        }
    }

    public struct PostCommentForPullRequestInput: AWSEncodableShape {
        /// The full commit ID of the commit in the source branch that is the current tip of the branch for the pull request when you post the comment.
        public let afterCommitId: String
        /// The full commit ID of the commit in the destination branch that was the tip of the branch at the time the pull request was created.
        public let beforeCommitId: String
        /// A unique, client-generated idempotency token that, when provided in a request, ensures the request cannot be repeated with a changed parameter. If a request is received with the same parameters and a token is included, the request returns information about the initial request that used that token.
        public let clientRequestToken: String?
        /// The content of your comment on the change.
        public let content: String
        /// The location of the change where you want to post your comment. If no location is provided, the comment is posted as a general comment on the pull request difference between the before commit ID and the after commit ID.
        public let location: Location?
        /// The system-generated ID of the pull request. To get this ID, use ListPullRequests.
        public let pullRequestId: String
        /// The name of the repository where you want to post a comment on a pull request.
        public let repositoryName: String

        @inlinable
        public init(afterCommitId: String, beforeCommitId: String, clientRequestToken: String? = PostCommentForPullRequestInput.idempotencyToken(), content: String, location: Location? = nil, pullRequestId: String, repositoryName: String) {
            self.afterCommitId = afterCommitId
            self.beforeCommitId = beforeCommitId
            self.clientRequestToken = clientRequestToken
            self.content = content
            self.location = location
            self.pullRequestId = pullRequestId
            self.repositoryName = repositoryName
        }

        public func validate(name: String) throws {
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case afterCommitId = "afterCommitId"
            case beforeCommitId = "beforeCommitId"
            case clientRequestToken = "clientRequestToken"
            case content = "content"
            case location = "location"
            case pullRequestId = "pullRequestId"
            case repositoryName = "repositoryName"
        }
    }

    public struct PostCommentForPullRequestOutput: AWSDecodableShape {
        /// In the directionality of the pull request, the blob ID of the after blob.
        public let afterBlobId: String?
        /// The full commit ID of the commit in the destination branch where the pull request is merged.
        public let afterCommitId: String?
        /// In the directionality of the pull request, the blob ID of the before blob.
        public let beforeBlobId: String?
        /// The full commit ID of the commit in the source branch used to create the pull request,  or in the case of an updated pull request, the full commit ID of the commit used to update the pull request.
        public let beforeCommitId: String?
        /// The content of the comment you posted.
        public let comment: Comment?
        /// The location of the change where you posted your comment.
        public let location: Location?
        /// The system-generated ID of the pull request.
        public let pullRequestId: String?
        /// The name of the repository where you posted a comment on a pull request.
        public let repositoryName: String?

        @inlinable
        public init(afterBlobId: String? = nil, afterCommitId: String? = nil, beforeBlobId: String? = nil, beforeCommitId: String? = nil, comment: Comment? = nil, location: Location? = nil, pullRequestId: String? = nil, repositoryName: String? = nil) {
            self.afterBlobId = afterBlobId
            self.afterCommitId = afterCommitId
            self.beforeBlobId = beforeBlobId
            self.beforeCommitId = beforeCommitId
            self.comment = comment
            self.location = location
            self.pullRequestId = pullRequestId
            self.repositoryName = repositoryName
        }

        private enum CodingKeys: String, CodingKey {
            case afterBlobId = "afterBlobId"
            case afterCommitId = "afterCommitId"
            case beforeBlobId = "beforeBlobId"
            case beforeCommitId = "beforeCommitId"
            case comment = "comment"
            case location = "location"
            case pullRequestId = "pullRequestId"
            case repositoryName = "repositoryName"
        }
    }

    public struct PostCommentReplyInput: AWSEncodableShape {
        /// A unique, client-generated idempotency token that, when provided in a request, ensures the request cannot be repeated with a changed parameter. If a request is received with the same parameters and a token is included, the request returns information about the initial request that used that token.
        public let clientRequestToken: String?
        /// The contents of your reply to a comment.
        public let content: String
        /// The system-generated ID of the comment to which you want to reply. To get this ID, use GetCommentsForComparedCommit  or GetCommentsForPullRequest.
        public let inReplyTo: String

        @inlinable
        public init(clientRequestToken: String? = PostCommentReplyInput.idempotencyToken(), content: String, inReplyTo: String) {
            self.clientRequestToken = clientRequestToken
            self.content = content
            self.inReplyTo = inReplyTo
        }

        private enum CodingKeys: String, CodingKey {
            case clientRequestToken = "clientRequestToken"
            case content = "content"
            case inReplyTo = "inReplyTo"
        }
    }

    public struct PostCommentReplyOutput: AWSDecodableShape {
        /// Information about the reply to a comment.
        public let comment: Comment?

        @inlinable
        public init(comment: Comment? = nil) {
            self.comment = comment
        }

        private enum CodingKeys: String, CodingKey {
            case comment = "comment"
        }
    }

    public struct PullRequest: AWSDecodableShape {
        /// The approval rules applied to the pull request.
        public let approvalRules: [ApprovalRule]?
        /// The Amazon Resource Name (ARN) of the user who created the pull request.
        public let authorArn: String?
        /// A unique, client-generated idempotency token that, when provided in a request, ensures the request cannot be repeated with a changed parameter. If a request is received with the same parameters and a token is included, the request returns information about the initial request that used that token.
        public let clientRequestToken: String?
        /// The date and time the pull request was originally created, in timestamp format.
        public let creationDate: Date?
        /// The user-defined description of the pull request. This description can be used to clarify what should be reviewed and other details of the request.
        public let description: String?
        /// The day and time of the last user or system activity on the pull request, in timestamp format.
        public let lastActivityDate: Date?
        /// The system-generated ID of the pull request.
        public let pullRequestId: String?
        /// The status of the pull request. Pull request status can only change from OPEN to CLOSED.
        public let pullRequestStatus: PullRequestStatusEnum?
        /// The targets of the pull request, including the source branch and destination branch for the pull request.
        public let pullRequestTargets: [PullRequestTarget]?
        /// The system-generated revision ID for the pull request.
        public let revisionId: String?
        /// The user-defined title of the pull request. This title is displayed in the list of pull requests to other repository users.
        public let title: String?

        @inlinable
        public init(approvalRules: [ApprovalRule]? = nil, authorArn: String? = nil, clientRequestToken: String? = nil, creationDate: Date? = nil, description: String? = nil, lastActivityDate: Date? = nil, pullRequestId: String? = nil, pullRequestStatus: PullRequestStatusEnum? = nil, pullRequestTargets: [PullRequestTarget]? = nil, revisionId: String? = nil, title: String? = nil) {
            self.approvalRules = approvalRules
            self.authorArn = authorArn
            self.clientRequestToken = clientRequestToken
            self.creationDate = creationDate
            self.description = description
            self.lastActivityDate = lastActivityDate
            self.pullRequestId = pullRequestId
            self.pullRequestStatus = pullRequestStatus
            self.pullRequestTargets = pullRequestTargets
            self.revisionId = revisionId
            self.title = title
        }

        private enum CodingKeys: String, CodingKey {
            case approvalRules = "approvalRules"
            case authorArn = "authorArn"
            case clientRequestToken = "clientRequestToken"
            case creationDate = "creationDate"
            case description = "description"
            case lastActivityDate = "lastActivityDate"
            case pullRequestId = "pullRequestId"
            case pullRequestStatus = "pullRequestStatus"
            case pullRequestTargets = "pullRequestTargets"
            case revisionId = "revisionId"
            case title = "title"
        }
    }

    public struct PullRequestCreatedEventMetadata: AWSDecodableShape {
        /// The commit ID of the tip of the branch specified as the destination branch when the pull request was created.
        public let destinationCommitId: String?
        /// The commit ID of the most recent commit that the source branch and the destination branch have in common.
        public let mergeBase: String?
        /// The name of the repository where the pull request was created.
        public let repositoryName: String?
        /// The commit ID on the source branch used when the pull request was created.
        public let sourceCommitId: String?

        @inlinable
        public init(destinationCommitId: String? = nil, mergeBase: String? = nil, repositoryName: String? = nil, sourceCommitId: String? = nil) {
            self.destinationCommitId = destinationCommitId
            self.mergeBase = mergeBase
            self.repositoryName = repositoryName
            self.sourceCommitId = sourceCommitId
        }

        private enum CodingKeys: String, CodingKey {
            case destinationCommitId = "destinationCommitId"
            case mergeBase = "mergeBase"
            case repositoryName = "repositoryName"
            case sourceCommitId = "sourceCommitId"
        }
    }

    public struct PullRequestEvent: AWSDecodableShape {
        /// The Amazon Resource Name (ARN) of the user whose actions resulted in the event. Examples include updating the pull request with more commits or changing the status of a pull request.
        public let actorArn: String?
        /// Information about a pull request event.
        public let approvalRuleEventMetadata: ApprovalRuleEventMetadata?
        /// Information about an approval rule override event for a pull request.
        public let approvalRuleOverriddenEventMetadata: ApprovalRuleOverriddenEventMetadata?
        /// Information about an approval state change for a pull request.
        public let approvalStateChangedEventMetadata: ApprovalStateChangedEventMetadata?
        /// The day and time of the pull request event, in timestamp format.
        public let eventDate: Date?
        /// Information about the source and destination branches for the pull request.
        public let pullRequestCreatedEventMetadata: PullRequestCreatedEventMetadata?
        /// The type of the pull request event (for example, a status change event (PULL_REQUEST_STATUS_CHANGED) or update event (PULL_REQUEST_SOURCE_REFERENCE_UPDATED)).
        public let pullRequestEventType: PullRequestEventType?
        /// The system-generated ID of the pull request.
        public let pullRequestId: String?
        /// Information about the change in mergability state for the pull request event.
        public let pullRequestMergedStateChangedEventMetadata: PullRequestMergedStateChangedEventMetadata?
        /// Information about the updated source branch for the pull request event.
        public let pullRequestSourceReferenceUpdatedEventMetadata: PullRequestSourceReferenceUpdatedEventMetadata?
        /// Information about the change in status for the pull request event.
        public let pullRequestStatusChangedEventMetadata: PullRequestStatusChangedEventMetadata?

        @inlinable
        public init(actorArn: String? = nil, approvalRuleEventMetadata: ApprovalRuleEventMetadata? = nil, approvalRuleOverriddenEventMetadata: ApprovalRuleOverriddenEventMetadata? = nil, approvalStateChangedEventMetadata: ApprovalStateChangedEventMetadata? = nil, eventDate: Date? = nil, pullRequestCreatedEventMetadata: PullRequestCreatedEventMetadata? = nil, pullRequestEventType: PullRequestEventType? = nil, pullRequestId: String? = nil, pullRequestMergedStateChangedEventMetadata: PullRequestMergedStateChangedEventMetadata? = nil, pullRequestSourceReferenceUpdatedEventMetadata: PullRequestSourceReferenceUpdatedEventMetadata? = nil, pullRequestStatusChangedEventMetadata: PullRequestStatusChangedEventMetadata? = nil) {
            self.actorArn = actorArn
            self.approvalRuleEventMetadata = approvalRuleEventMetadata
            self.approvalRuleOverriddenEventMetadata = approvalRuleOverriddenEventMetadata
            self.approvalStateChangedEventMetadata = approvalStateChangedEventMetadata
            self.eventDate = eventDate
            self.pullRequestCreatedEventMetadata = pullRequestCreatedEventMetadata
            self.pullRequestEventType = pullRequestEventType
            self.pullRequestId = pullRequestId
            self.pullRequestMergedStateChangedEventMetadata = pullRequestMergedStateChangedEventMetadata
            self.pullRequestSourceReferenceUpdatedEventMetadata = pullRequestSourceReferenceUpdatedEventMetadata
            self.pullRequestStatusChangedEventMetadata = pullRequestStatusChangedEventMetadata
        }

        private enum CodingKeys: String, CodingKey {
            case actorArn = "actorArn"
            case approvalRuleEventMetadata = "approvalRuleEventMetadata"
            case approvalRuleOverriddenEventMetadata = "approvalRuleOverriddenEventMetadata"
            case approvalStateChangedEventMetadata = "approvalStateChangedEventMetadata"
            case eventDate = "eventDate"
            case pullRequestCreatedEventMetadata = "pullRequestCreatedEventMetadata"
            case pullRequestEventType = "pullRequestEventType"
            case pullRequestId = "pullRequestId"
            case pullRequestMergedStateChangedEventMetadata = "pullRequestMergedStateChangedEventMetadata"
            case pullRequestSourceReferenceUpdatedEventMetadata = "pullRequestSourceReferenceUpdatedEventMetadata"
            case pullRequestStatusChangedEventMetadata = "pullRequestStatusChangedEventMetadata"
        }
    }

    public struct PullRequestMergedStateChangedEventMetadata: AWSDecodableShape {
        /// The name of the branch that the pull request is merged into.
        public let destinationReference: String?
        /// Information about the merge state change event.
        public let mergeMetadata: MergeMetadata?
        /// The name of the repository where the pull request was created.
        public let repositoryName: String?

        @inlinable
        public init(destinationReference: String? = nil, mergeMetadata: MergeMetadata? = nil, repositoryName: String? = nil) {
            self.destinationReference = destinationReference
            self.mergeMetadata = mergeMetadata
            self.repositoryName = repositoryName
        }

        private enum CodingKeys: String, CodingKey {
            case destinationReference = "destinationReference"
            case mergeMetadata = "mergeMetadata"
            case repositoryName = "repositoryName"
        }
    }

    public struct PullRequestSourceReferenceUpdatedEventMetadata: AWSDecodableShape {
        /// The full commit ID of the commit in the source branch that was the tip of the branch at the time the pull request was updated.
        public let afterCommitId: String?
        /// The full commit ID of the commit in the destination branch that was the tip of the branch at the time the pull request was updated.
        public let beforeCommitId: String?
        /// The commit ID of the most recent commit that the source branch and the destination branch have in common.
        public let mergeBase: String?
        /// The name of the repository where the pull request was updated.
        public let repositoryName: String?

        @inlinable
        public init(afterCommitId: String? = nil, beforeCommitId: String? = nil, mergeBase: String? = nil, repositoryName: String? = nil) {
            self.afterCommitId = afterCommitId
            self.beforeCommitId = beforeCommitId
            self.mergeBase = mergeBase
            self.repositoryName = repositoryName
        }

        private enum CodingKeys: String, CodingKey {
            case afterCommitId = "afterCommitId"
            case beforeCommitId = "beforeCommitId"
            case mergeBase = "mergeBase"
            case repositoryName = "repositoryName"
        }
    }

    public struct PullRequestStatusChangedEventMetadata: AWSDecodableShape {
        /// The changed status of the pull request.
        public let pullRequestStatus: PullRequestStatusEnum?

        @inlinable
        public init(pullRequestStatus: PullRequestStatusEnum? = nil) {
            self.pullRequestStatus = pullRequestStatus
        }

        private enum CodingKeys: String, CodingKey {
            case pullRequestStatus = "pullRequestStatus"
        }
    }

    public struct PullRequestTarget: AWSDecodableShape {
        /// The full commit ID that is the tip of the destination branch. This is the commit where the pull request was or will be merged.
        public let destinationCommit: String?
        /// The branch of the repository where the pull request changes are merged. Also known as the destination branch.
        public let destinationReference: String?
        /// The commit ID of the most recent commit that the source branch and the destination branch have in common.
        public let mergeBase: String?
        /// Returns metadata about the state of the merge, including whether the merge has been made.
        public let mergeMetadata: MergeMetadata?
        /// The name of the repository that contains the pull request source and destination branches.
        public let repositoryName: String?
        /// The full commit ID of the tip of the source branch used to create the pull request. If the pull request branch is updated by a push while the pull request is open, the commit ID changes to reflect the new tip of the branch.
        public let sourceCommit: String?
        /// The branch of the repository that contains the changes for the pull request. Also known as the source branch.
        public let sourceReference: String?

        @inlinable
        public init(destinationCommit: String? = nil, destinationReference: String? = nil, mergeBase: String? = nil, mergeMetadata: MergeMetadata? = nil, repositoryName: String? = nil, sourceCommit: String? = nil, sourceReference: String? = nil) {
            self.destinationCommit = destinationCommit
            self.destinationReference = destinationReference
            self.mergeBase = mergeBase
            self.mergeMetadata = mergeMetadata
            self.repositoryName = repositoryName
            self.sourceCommit = sourceCommit
            self.sourceReference = sourceReference
        }

        private enum CodingKeys: String, CodingKey {
            case destinationCommit = "destinationCommit"
            case destinationReference = "destinationReference"
            case mergeBase = "mergeBase"
            case mergeMetadata = "mergeMetadata"
            case repositoryName = "repositoryName"
            case sourceCommit = "sourceCommit"
            case sourceReference = "sourceReference"
        }
    }

    public struct PutCommentReactionInput: AWSEncodableShape {
        /// The ID of the comment to which you want to add or update a reaction.
        public let commentId: String
        /// The emoji reaction you want to add or update. To remove a reaction, provide a value of blank or null. You can also provide the value of none. For information about emoji reaction values supported in CodeCommit, see the CodeCommit User Guide.
        public let reactionValue: String

        @inlinable
        public init(commentId: String, reactionValue: String) {
            self.commentId = commentId
            self.reactionValue = reactionValue
        }

        private enum CodingKeys: String, CodingKey {
            case commentId = "commentId"
            case reactionValue = "reactionValue"
        }
    }

    public struct PutFileEntry: AWSEncodableShape {
        /// The content of the file, if a source file is not specified.
        public let fileContent: AWSBase64Data?
        /// The extrapolated file mode permissions for the file. Valid values include EXECUTABLE and NORMAL.
        public let fileMode: FileModeTypeEnum?
        /// The full path to the file in the repository, including the name of the file.
        public let filePath: String
        /// The name and full path of the file that contains the changes you want to make as part of the commit,  if you are not providing the file content directly.
        public let sourceFile: SourceFileSpecifier?

        @inlinable
        public init(fileContent: AWSBase64Data? = nil, fileMode: FileModeTypeEnum? = nil, filePath: String, sourceFile: SourceFileSpecifier? = nil) {
            self.fileContent = fileContent
            self.fileMode = fileMode
            self.filePath = filePath
            self.sourceFile = sourceFile
        }

        public func validate(name: String) throws {
            try self.validate(self.fileContent, name: "fileContent", parent: name, max: 6291456)
        }

        private enum CodingKeys: String, CodingKey {
            case fileContent = "fileContent"
            case fileMode = "fileMode"
            case filePath = "filePath"
            case sourceFile = "sourceFile"
        }
    }

    public struct PutFileInput: AWSEncodableShape {
        /// The name of the branch where you want to add or update the file. If this is an empty repository, this branch is created.
        public let branchName: String
        /// A message about why this file was added or updated. Although it is optional, a message makes the commit history for your repository more useful.
        public let commitMessage: String?
        /// An email address for the person adding or updating the file.
        public let email: String?
        /// The content of the file, in binary object format.
        public let fileContent: AWSBase64Data
        /// The file mode permissions of the blob. Valid file mode permissions are listed here.
        public let fileMode: FileModeTypeEnum?
        /// The name of the file you want to add or update, including the relative path to the file in the repository.  If the path does not currently exist in the repository, the path is created as part of adding the file.
        public let filePath: String
        /// The name of the person adding or updating the file. Although it is optional, a name makes the commit history for your repository more useful.
        public let name: String?
        /// The full commit ID of the head commit in the branch where you want to add or update the file. If this is an empty repository,  no commit ID is required. If this is not an empty repository, a commit ID is required.  The commit ID must match the ID of the head commit at the time of the operation. Otherwise, an error occurs, and the file is not added or updated.
        public let parentCommitId: String?
        /// The name of the repository where you want to add or update the file.
        public let repositoryName: String

        @inlinable
        public init(branchName: String, commitMessage: String? = nil, email: String? = nil, fileContent: AWSBase64Data, fileMode: FileModeTypeEnum? = nil, filePath: String, name: String? = nil, parentCommitId: String? = nil, repositoryName: String) {
            self.branchName = branchName
            self.commitMessage = commitMessage
            self.email = email
            self.fileContent = fileContent
            self.fileMode = fileMode
            self.filePath = filePath
            self.name = name
            self.parentCommitId = parentCommitId
            self.repositoryName = repositoryName
        }

        public func validate(name: String) throws {
            try self.validate(self.branchName, name: "branchName", parent: name, max: 256)
            try self.validate(self.branchName, name: "branchName", parent: name, min: 1)
            try self.validate(self.fileContent, name: "fileContent", parent: name, max: 6291456)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case branchName = "branchName"
            case commitMessage = "commitMessage"
            case email = "email"
            case fileContent = "fileContent"
            case fileMode = "fileMode"
            case filePath = "filePath"
            case name = "name"
            case parentCommitId = "parentCommitId"
            case repositoryName = "repositoryName"
        }
    }

    public struct PutFileOutput: AWSDecodableShape {
        /// The ID of the blob, which is its SHA-1 pointer.
        public let blobId: String
        /// The full SHA ID of the commit that contains this file change.
        public let commitId: String
        /// The full SHA-1 pointer of the tree information for the commit that contains this file change.
        public let treeId: String

        @inlinable
        public init(blobId: String, commitId: String, treeId: String) {
            self.blobId = blobId
            self.commitId = commitId
            self.treeId = treeId
        }

        private enum CodingKeys: String, CodingKey {
            case blobId = "blobId"
            case commitId = "commitId"
            case treeId = "treeId"
        }
    }

    public struct PutRepositoryTriggersInput: AWSEncodableShape {
        /// The name of the repository where you want to create or update the trigger.
        public let repositoryName: String
        /// The JSON block of configuration information for each trigger.
        public let triggers: [RepositoryTrigger]

        @inlinable
        public init(repositoryName: String, triggers: [RepositoryTrigger]) {
            self.repositoryName = repositoryName
            self.triggers = triggers
        }

        public func validate(name: String) throws {
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
            try self.triggers.forEach {
                try $0.validate(name: "\(name).triggers[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case repositoryName = "repositoryName"
            case triggers = "triggers"
        }
    }

    public struct PutRepositoryTriggersOutput: AWSDecodableShape {
        /// The system-generated unique ID for the create or update operation.
        public let configurationId: String?

        @inlinable
        public init(configurationId: String? = nil) {
            self.configurationId = configurationId
        }

        private enum CodingKeys: String, CodingKey {
            case configurationId = "configurationId"
        }
    }

    public struct ReactionForComment: AWSDecodableShape {
        /// The reaction for a specified comment.
        public let reaction: ReactionValueFormats?
        /// A numerical count of users who reacted with the specified emoji whose identities have been subsequently deleted from IAM. While these IAM users or roles no longer exist, the reactions might still appear in total reaction counts.
        public let reactionsFromDeletedUsersCount: Int?
        /// The Amazon Resource Names (ARNs) of users who have provided reactions to the comment.
        public let reactionUsers: [String]?

        @inlinable
        public init(reaction: ReactionValueFormats? = nil, reactionsFromDeletedUsersCount: Int? = nil, reactionUsers: [String]? = nil) {
            self.reaction = reaction
            self.reactionsFromDeletedUsersCount = reactionsFromDeletedUsersCount
            self.reactionUsers = reactionUsers
        }

        private enum CodingKeys: String, CodingKey {
            case reaction = "reaction"
            case reactionsFromDeletedUsersCount = "reactionsFromDeletedUsersCount"
            case reactionUsers = "reactionUsers"
        }
    }

    public struct ReactionValueFormats: AWSDecodableShape {
        /// The Emoji Version 1.0 graphic of the reaction. These graphics are interpreted slightly differently on different operating systems.
        public let emoji: String?
        /// The emoji short code for the reaction. Short codes are interpreted slightly differently on different operating systems.
        public let shortCode: String?
        /// The Unicode codepoint for the reaction.
        public let unicode: String?

        @inlinable
        public init(emoji: String? = nil, shortCode: String? = nil, unicode: String? = nil) {
            self.emoji = emoji
            self.shortCode = shortCode
            self.unicode = unicode
        }

        private enum CodingKeys: String, CodingKey {
            case emoji = "emoji"
            case shortCode = "shortCode"
            case unicode = "unicode"
        }
    }

    public struct ReplaceContentEntry: AWSEncodableShape {
        /// The base-64 encoded content to use when the replacement type is USE_NEW_CONTENT.
        public let content: AWSBase64Data?
        /// The file mode to apply during conflict resoltion.
        public let fileMode: FileModeTypeEnum?
        /// The path of the conflicting file.
        public let filePath: String
        /// The replacement type to use when determining how to resolve the conflict.
        public let replacementType: ReplacementTypeEnum

        @inlinable
        public init(content: AWSBase64Data? = nil, fileMode: FileModeTypeEnum? = nil, filePath: String, replacementType: ReplacementTypeEnum) {
            self.content = content
            self.fileMode = fileMode
            self.filePath = filePath
            self.replacementType = replacementType
        }

        public func validate(name: String) throws {
            try self.validate(self.content, name: "content", parent: name, max: 6291456)
        }

        private enum CodingKeys: String, CodingKey {
            case content = "content"
            case fileMode = "fileMode"
            case filePath = "filePath"
            case replacementType = "replacementType"
        }
    }

    public struct RepositoryMetadata: AWSDecodableShape {
        /// The ID of the Amazon Web Services account associated with the repository.
        public let accountId: String?
        /// The Amazon Resource Name (ARN) of the repository.
        public let arn: String?
        /// The URL to use for cloning the repository over HTTPS.
        public let cloneUrlHttp: String?
        /// The URL to use for cloning the repository over SSH.
        public let cloneUrlSsh: String?
        /// The date and time the repository was created, in timestamp format.
        public let creationDate: Date?
        /// The repository's default branch name.
        public let defaultBranch: String?
        /// The ID of the Key Management Service encryption key used to encrypt and decrypt the repository.
        public let kmsKeyId: String?
        /// The date and time the repository was last modified, in timestamp format.
        public let lastModifiedDate: Date?
        /// A comment or description about the repository.
        public let repositoryDescription: String?
        /// The ID of the repository.
        public let repositoryId: String?
        /// The repository's name.
        public let repositoryName: String?

        @inlinable
        public init(accountId: String? = nil, arn: String? = nil, cloneUrlHttp: String? = nil, cloneUrlSsh: String? = nil, creationDate: Date? = nil, defaultBranch: String? = nil, kmsKeyId: String? = nil, lastModifiedDate: Date? = nil, repositoryDescription: String? = nil, repositoryId: String? = nil, repositoryName: String? = nil) {
            self.accountId = accountId
            self.arn = arn
            self.cloneUrlHttp = cloneUrlHttp
            self.cloneUrlSsh = cloneUrlSsh
            self.creationDate = creationDate
            self.defaultBranch = defaultBranch
            self.kmsKeyId = kmsKeyId
            self.lastModifiedDate = lastModifiedDate
            self.repositoryDescription = repositoryDescription
            self.repositoryId = repositoryId
            self.repositoryName = repositoryName
        }

        private enum CodingKeys: String, CodingKey {
            case accountId = "accountId"
            case arn = "Arn"
            case cloneUrlHttp = "cloneUrlHttp"
            case cloneUrlSsh = "cloneUrlSsh"
            case creationDate = "creationDate"
            case defaultBranch = "defaultBranch"
            case kmsKeyId = "kmsKeyId"
            case lastModifiedDate = "lastModifiedDate"
            case repositoryDescription = "repositoryDescription"
            case repositoryId = "repositoryId"
            case repositoryName = "repositoryName"
        }
    }

    public struct RepositoryNameIdPair: AWSDecodableShape {
        /// The ID associated with the repository.
        public let repositoryId: String?
        /// The name associated with the repository.
        public let repositoryName: String?

        @inlinable
        public init(repositoryId: String? = nil, repositoryName: String? = nil) {
            self.repositoryId = repositoryId
            self.repositoryName = repositoryName
        }

        private enum CodingKeys: String, CodingKey {
            case repositoryId = "repositoryId"
            case repositoryName = "repositoryName"
        }
    }

    public struct RepositoryTrigger: AWSEncodableShape & AWSDecodableShape {
        /// The branches to be included in the trigger configuration. If you specify an empty array, the trigger applies to all branches.  Although no content is required in the array, you must include the array itself.
        public let branches: [String]?
        /// Any custom data associated with the trigger to be included in the information sent to the target of the trigger.
        public let customData: String?
        /// The ARN of the resource that is the target for a trigger (for example, the ARN of a topic in Amazon SNS).
        public let destinationArn: String
        /// The repository events that cause the trigger to run actions in another service, such as sending a notification through Amazon SNS.     The valid value "all" cannot be used with any other values.
        public let events: [RepositoryTriggerEventEnum]
        /// The name of the trigger.
        public let name: String

        @inlinable
        public init(branches: [String]? = nil, customData: String? = nil, destinationArn: String, events: [RepositoryTriggerEventEnum], name: String) {
            self.branches = branches
            self.customData = customData
            self.destinationArn = destinationArn
            self.events = events
            self.name = name
        }

        public func validate(name: String) throws {
            try self.branches?.forEach {
                try validate($0, name: "branches[]", parent: name, max: 256)
                try validate($0, name: "branches[]", parent: name, min: 1)
            }
        }

        private enum CodingKeys: String, CodingKey {
            case branches = "branches"
            case customData = "customData"
            case destinationArn = "destinationArn"
            case events = "events"
            case name = "name"
        }
    }

    public struct RepositoryTriggerExecutionFailure: AWSDecodableShape {
        /// Message information about the trigger that did not run.
        public let failureMessage: String?
        /// The name of the trigger that did not run.
        public let trigger: String?

        @inlinable
        public init(failureMessage: String? = nil, trigger: String? = nil) {
            self.failureMessage = failureMessage
            self.trigger = trigger
        }

        private enum CodingKeys: String, CodingKey {
            case failureMessage = "failureMessage"
            case trigger = "trigger"
        }
    }

    public struct SetFileModeEntry: AWSEncodableShape {
        /// The file mode for the file.
        public let fileMode: FileModeTypeEnum
        /// The full path to the file, including the name of the file.
        public let filePath: String

        @inlinable
        public init(fileMode: FileModeTypeEnum, filePath: String) {
            self.fileMode = fileMode
            self.filePath = filePath
        }

        private enum CodingKeys: String, CodingKey {
            case fileMode = "fileMode"
            case filePath = "filePath"
        }
    }

    public struct SourceFileSpecifier: AWSEncodableShape {
        /// The full path to the file, including the name of the file.
        public let filePath: String
        /// Whether to remove the source file from the parent commit.
        public let isMove: Bool?

        @inlinable
        public init(filePath: String, isMove: Bool? = nil) {
            self.filePath = filePath
            self.isMove = isMove
        }

        private enum CodingKeys: String, CodingKey {
            case filePath = "filePath"
            case isMove = "isMove"
        }
    }

    public struct SubModule: AWSDecodableShape {
        /// The fully qualified path to the folder that contains the reference to the submodule.
        public let absolutePath: String?
        /// The commit ID that contains the reference to the submodule.
        public let commitId: String?
        /// The relative path of the submodule from the folder where the query originated.
        public let relativePath: String?

        @inlinable
        public init(absolutePath: String? = nil, commitId: String? = nil, relativePath: String? = nil) {
            self.absolutePath = absolutePath
            self.commitId = commitId
            self.relativePath = relativePath
        }

        private enum CodingKeys: String, CodingKey {
            case absolutePath = "absolutePath"
            case commitId = "commitId"
            case relativePath = "relativePath"
        }
    }

    public struct SymbolicLink: AWSDecodableShape {
        /// The fully qualified path to the folder that contains the symbolic link.
        public let absolutePath: String?
        /// The blob ID that contains the information about the symbolic link.
        public let blobId: String?
        /// The file mode permissions of the blob that cotains information about the symbolic link.
        public let fileMode: FileModeTypeEnum?
        /// The relative path of the symbolic link from the folder where the query originated.
        public let relativePath: String?

        @inlinable
        public init(absolutePath: String? = nil, blobId: String? = nil, fileMode: FileModeTypeEnum? = nil, relativePath: String? = nil) {
            self.absolutePath = absolutePath
            self.blobId = blobId
            self.fileMode = fileMode
            self.relativePath = relativePath
        }

        private enum CodingKeys: String, CodingKey {
            case absolutePath = "absolutePath"
            case blobId = "blobId"
            case fileMode = "fileMode"
            case relativePath = "relativePath"
        }
    }

    public struct TagResourceInput: AWSEncodableShape {
        /// The Amazon Resource Name (ARN) of the resource to which you want to add or update tags.
        public let resourceArn: String
        /// The key-value pair to use when tagging this repository.
        public let tags: [String: String]

        @inlinable
        public init(resourceArn: String, tags: [String: String]) {
            self.resourceArn = resourceArn
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.tags.forEach {
                try validate($0.key, name: "tags.key", parent: name, max: 128)
                try validate($0.key, name: "tags.key", parent: name, min: 1)
                try validate($0.value, name: "tags[\"\($0.key)\"]", parent: name, max: 256)
            }
        }

        private enum CodingKeys: String, CodingKey {
            case resourceArn = "resourceArn"
            case tags = "tags"
        }
    }

    public struct Target: AWSEncodableShape {
        /// The branch of the repository where the pull request changes are merged. Also known as the destination branch.
        public let destinationReference: String?
        /// The name of the repository that contains the pull request.
        public let repositoryName: String
        /// The branch of the repository that contains the changes for the pull request. Also known as the source branch.
        public let sourceReference: String

        @inlinable
        public init(destinationReference: String? = nil, repositoryName: String, sourceReference: String) {
            self.destinationReference = destinationReference
            self.repositoryName = repositoryName
            self.sourceReference = sourceReference
        }

        public func validate(name: String) throws {
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case destinationReference = "destinationReference"
            case repositoryName = "repositoryName"
            case sourceReference = "sourceReference"
        }
    }

    public struct TestRepositoryTriggersInput: AWSEncodableShape {
        /// The name of the repository in which to test the triggers.
        public let repositoryName: String
        /// The list of triggers to test.
        public let triggers: [RepositoryTrigger]

        @inlinable
        public init(repositoryName: String, triggers: [RepositoryTrigger]) {
            self.repositoryName = repositoryName
            self.triggers = triggers
        }

        public func validate(name: String) throws {
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
            try self.triggers.forEach {
                try $0.validate(name: "\(name).triggers[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case repositoryName = "repositoryName"
            case triggers = "triggers"
        }
    }

    public struct TestRepositoryTriggersOutput: AWSDecodableShape {
        /// The list of triggers that were not tested. This list provides the names of the triggers that could not be tested, separated by commas.
        public let failedExecutions: [RepositoryTriggerExecutionFailure]?
        /// The list of triggers that were successfully tested. This list provides the names of the triggers that were successfully tested, separated by commas.
        public let successfulExecutions: [String]?

        @inlinable
        public init(failedExecutions: [RepositoryTriggerExecutionFailure]? = nil, successfulExecutions: [String]? = nil) {
            self.failedExecutions = failedExecutions
            self.successfulExecutions = successfulExecutions
        }

        private enum CodingKeys: String, CodingKey {
            case failedExecutions = "failedExecutions"
            case successfulExecutions = "successfulExecutions"
        }
    }

    public struct UntagResourceInput: AWSEncodableShape {
        /// The Amazon Resource Name (ARN) of the resource to which you want to remove tags.
        public let resourceArn: String
        /// The tag key for each tag that you want to remove from the resource.
        public let tagKeys: [String]

        @inlinable
        public init(resourceArn: String, tagKeys: [String]) {
            self.resourceArn = resourceArn
            self.tagKeys = tagKeys
        }

        public func validate(name: String) throws {
            try self.tagKeys.forEach {
                try validate($0, name: "tagKeys[]", parent: name, max: 128)
                try validate($0, name: "tagKeys[]", parent: name, min: 1)
            }
        }

        private enum CodingKeys: String, CodingKey {
            case resourceArn = "resourceArn"
            case tagKeys = "tagKeys"
        }
    }

    public struct UpdateApprovalRuleTemplateContentInput: AWSEncodableShape {
        /// The name of the approval rule template where you want to update the content of the rule.
        public let approvalRuleTemplateName: String
        /// The SHA-256 hash signature for the content of the approval rule. You can retrieve this information by using GetPullRequest.
        public let existingRuleContentSha256: String?
        /// The content that replaces the existing content of the rule. Content statements must be complete. You cannot provide only the changes.
        public let newRuleContent: String

        @inlinable
        public init(approvalRuleTemplateName: String, existingRuleContentSha256: String? = nil, newRuleContent: String) {
            self.approvalRuleTemplateName = approvalRuleTemplateName
            self.existingRuleContentSha256 = existingRuleContentSha256
            self.newRuleContent = newRuleContent
        }

        public func validate(name: String) throws {
            try self.validate(self.approvalRuleTemplateName, name: "approvalRuleTemplateName", parent: name, max: 100)
            try self.validate(self.approvalRuleTemplateName, name: "approvalRuleTemplateName", parent: name, min: 1)
            try self.validate(self.newRuleContent, name: "newRuleContent", parent: name, max: 3000)
            try self.validate(self.newRuleContent, name: "newRuleContent", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case approvalRuleTemplateName = "approvalRuleTemplateName"
            case existingRuleContentSha256 = "existingRuleContentSha256"
            case newRuleContent = "newRuleContent"
        }
    }

    public struct UpdateApprovalRuleTemplateContentOutput: AWSDecodableShape {
        public let approvalRuleTemplate: ApprovalRuleTemplate

        @inlinable
        public init(approvalRuleTemplate: ApprovalRuleTemplate) {
            self.approvalRuleTemplate = approvalRuleTemplate
        }

        private enum CodingKeys: String, CodingKey {
            case approvalRuleTemplate = "approvalRuleTemplate"
        }
    }

    public struct UpdateApprovalRuleTemplateDescriptionInput: AWSEncodableShape {
        /// The updated description of the approval rule template.
        public let approvalRuleTemplateDescription: String
        /// The name of the template for which you want to update the description.
        public let approvalRuleTemplateName: String

        @inlinable
        public init(approvalRuleTemplateDescription: String, approvalRuleTemplateName: String) {
            self.approvalRuleTemplateDescription = approvalRuleTemplateDescription
            self.approvalRuleTemplateName = approvalRuleTemplateName
        }

        public func validate(name: String) throws {
            try self.validate(self.approvalRuleTemplateDescription, name: "approvalRuleTemplateDescription", parent: name, max: 1000)
            try self.validate(self.approvalRuleTemplateName, name: "approvalRuleTemplateName", parent: name, max: 100)
            try self.validate(self.approvalRuleTemplateName, name: "approvalRuleTemplateName", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case approvalRuleTemplateDescription = "approvalRuleTemplateDescription"
            case approvalRuleTemplateName = "approvalRuleTemplateName"
        }
    }

    public struct UpdateApprovalRuleTemplateDescriptionOutput: AWSDecodableShape {
        /// The structure and content of the updated approval rule template.
        public let approvalRuleTemplate: ApprovalRuleTemplate

        @inlinable
        public init(approvalRuleTemplate: ApprovalRuleTemplate) {
            self.approvalRuleTemplate = approvalRuleTemplate
        }

        private enum CodingKeys: String, CodingKey {
            case approvalRuleTemplate = "approvalRuleTemplate"
        }
    }

    public struct UpdateApprovalRuleTemplateNameInput: AWSEncodableShape {
        /// The new name you want to apply to the approval rule template.
        public let newApprovalRuleTemplateName: String
        /// The current name of the approval rule template.
        public let oldApprovalRuleTemplateName: String

        @inlinable
        public init(newApprovalRuleTemplateName: String, oldApprovalRuleTemplateName: String) {
            self.newApprovalRuleTemplateName = newApprovalRuleTemplateName
            self.oldApprovalRuleTemplateName = oldApprovalRuleTemplateName
        }

        public func validate(name: String) throws {
            try self.validate(self.newApprovalRuleTemplateName, name: "newApprovalRuleTemplateName", parent: name, max: 100)
            try self.validate(self.newApprovalRuleTemplateName, name: "newApprovalRuleTemplateName", parent: name, min: 1)
            try self.validate(self.oldApprovalRuleTemplateName, name: "oldApprovalRuleTemplateName", parent: name, max: 100)
            try self.validate(self.oldApprovalRuleTemplateName, name: "oldApprovalRuleTemplateName", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case newApprovalRuleTemplateName = "newApprovalRuleTemplateName"
            case oldApprovalRuleTemplateName = "oldApprovalRuleTemplateName"
        }
    }

    public struct UpdateApprovalRuleTemplateNameOutput: AWSDecodableShape {
        /// The structure and content of the updated approval rule template.
        public let approvalRuleTemplate: ApprovalRuleTemplate

        @inlinable
        public init(approvalRuleTemplate: ApprovalRuleTemplate) {
            self.approvalRuleTemplate = approvalRuleTemplate
        }

        private enum CodingKeys: String, CodingKey {
            case approvalRuleTemplate = "approvalRuleTemplate"
        }
    }

    public struct UpdateCommentInput: AWSEncodableShape {
        /// The system-generated ID of the comment you want to update. To get this ID, use GetCommentsForComparedCommit  or GetCommentsForPullRequest.
        public let commentId: String
        /// The updated content to replace the existing content of the comment.
        public let content: String

        @inlinable
        public init(commentId: String, content: String) {
            self.commentId = commentId
            self.content = content
        }

        private enum CodingKeys: String, CodingKey {
            case commentId = "commentId"
            case content = "content"
        }
    }

    public struct UpdateCommentOutput: AWSDecodableShape {
        /// Information about the updated comment.
        public let comment: Comment?

        @inlinable
        public init(comment: Comment? = nil) {
            self.comment = comment
        }

        private enum CodingKeys: String, CodingKey {
            case comment = "comment"
        }
    }

    public struct UpdateDefaultBranchInput: AWSEncodableShape {
        /// The name of the branch to set as the default branch.
        public let defaultBranchName: String
        /// The name of the repository for which you want to set or change the default branch.
        public let repositoryName: String

        @inlinable
        public init(defaultBranchName: String, repositoryName: String) {
            self.defaultBranchName = defaultBranchName
            self.repositoryName = repositoryName
        }

        public func validate(name: String) throws {
            try self.validate(self.defaultBranchName, name: "defaultBranchName", parent: name, max: 256)
            try self.validate(self.defaultBranchName, name: "defaultBranchName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case defaultBranchName = "defaultBranchName"
            case repositoryName = "repositoryName"
        }
    }

    public struct UpdatePullRequestApprovalRuleContentInput: AWSEncodableShape {
        /// The name of the approval rule you want to update.
        public let approvalRuleName: String
        /// The SHA-256 hash signature for the content of the approval rule. You can retrieve this information by using GetPullRequest.
        public let existingRuleContentSha256: String?
        /// The updated content for the approval rule.  When you update the content of the approval rule, you can specify approvers in an approval pool in one of two ways:    CodeCommitApprovers: This option only requires an Amazon Web Services account and a resource. It can be used for both IAM users and federated access users whose name matches the provided resource name. This is a very powerful option that offers a great deal of flexibility. For example, if you specify the Amazon Web Services account 123456789012 and Mary_Major, all of the following are counted as approvals coming from that user:   An IAM user in the account (arn:aws:iam::123456789012:user/Mary_Major)   A federated user identified in IAM as Mary_Major (arn:aws:sts::123456789012:federated-user/Mary_Major)   This option does not recognize an active session of someone assuming the role of CodeCommitReview with a role session name of Mary_Major (arn:aws:sts::123456789012:assumed-role/CodeCommitReview/Mary_Major) unless you include a wildcard (*Mary_Major).    Fully qualified ARN: This option allows you to specify the fully qualified Amazon Resource Name (ARN) of the IAM user or role.    For more information about IAM ARNs, wildcards, and formats, see IAM Identifiers in the IAM User Guide.
        public let newRuleContent: String
        /// The system-generated ID of the pull request.
        public let pullRequestId: String

        @inlinable
        public init(approvalRuleName: String, existingRuleContentSha256: String? = nil, newRuleContent: String, pullRequestId: String) {
            self.approvalRuleName = approvalRuleName
            self.existingRuleContentSha256 = existingRuleContentSha256
            self.newRuleContent = newRuleContent
            self.pullRequestId = pullRequestId
        }

        public func validate(name: String) throws {
            try self.validate(self.approvalRuleName, name: "approvalRuleName", parent: name, max: 100)
            try self.validate(self.approvalRuleName, name: "approvalRuleName", parent: name, min: 1)
            try self.validate(self.newRuleContent, name: "newRuleContent", parent: name, max: 3000)
            try self.validate(self.newRuleContent, name: "newRuleContent", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case approvalRuleName = "approvalRuleName"
            case existingRuleContentSha256 = "existingRuleContentSha256"
            case newRuleContent = "newRuleContent"
            case pullRequestId = "pullRequestId"
        }
    }

    public struct UpdatePullRequestApprovalRuleContentOutput: AWSDecodableShape {
        /// Information about the updated approval rule.
        public let approvalRule: ApprovalRule

        @inlinable
        public init(approvalRule: ApprovalRule) {
            self.approvalRule = approvalRule
        }

        private enum CodingKeys: String, CodingKey {
            case approvalRule = "approvalRule"
        }
    }

    public struct UpdatePullRequestApprovalStateInput: AWSEncodableShape {
        /// The approval state to associate with the user on the pull request.
        public let approvalState: ApprovalState
        /// The system-generated ID of the pull request.
        public let pullRequestId: String
        /// The system-generated ID of the revision.
        public let revisionId: String

        @inlinable
        public init(approvalState: ApprovalState, pullRequestId: String, revisionId: String) {
            self.approvalState = approvalState
            self.pullRequestId = pullRequestId
            self.revisionId = revisionId
        }

        private enum CodingKeys: String, CodingKey {
            case approvalState = "approvalState"
            case pullRequestId = "pullRequestId"
            case revisionId = "revisionId"
        }
    }

    public struct UpdatePullRequestDescriptionInput: AWSEncodableShape {
        /// The updated content of the description for the pull request. This content replaces the existing description.
        public let description: String
        /// The system-generated ID of the pull request. To get this ID, use ListPullRequests.
        public let pullRequestId: String

        @inlinable
        public init(description: String, pullRequestId: String) {
            self.description = description
            self.pullRequestId = pullRequestId
        }

        public func validate(name: String) throws {
            try self.validate(self.description, name: "description", parent: name, max: 10240)
        }

        private enum CodingKeys: String, CodingKey {
            case description = "description"
            case pullRequestId = "pullRequestId"
        }
    }

    public struct UpdatePullRequestDescriptionOutput: AWSDecodableShape {
        /// Information about the updated pull request.
        public let pullRequest: PullRequest

        @inlinable
        public init(pullRequest: PullRequest) {
            self.pullRequest = pullRequest
        }

        private enum CodingKeys: String, CodingKey {
            case pullRequest = "pullRequest"
        }
    }

    public struct UpdatePullRequestStatusInput: AWSEncodableShape {
        /// The system-generated ID of the pull request. To get this ID, use ListPullRequests.
        public let pullRequestId: String
        /// The status of the pull request. The only valid operations are to update the status from OPEN to OPEN, OPEN to CLOSED or from CLOSED to CLOSED.
        public let pullRequestStatus: PullRequestStatusEnum

        @inlinable
        public init(pullRequestId: String, pullRequestStatus: PullRequestStatusEnum) {
            self.pullRequestId = pullRequestId
            self.pullRequestStatus = pullRequestStatus
        }

        private enum CodingKeys: String, CodingKey {
            case pullRequestId = "pullRequestId"
            case pullRequestStatus = "pullRequestStatus"
        }
    }

    public struct UpdatePullRequestStatusOutput: AWSDecodableShape {
        /// Information about the pull request.
        public let pullRequest: PullRequest

        @inlinable
        public init(pullRequest: PullRequest) {
            self.pullRequest = pullRequest
        }

        private enum CodingKeys: String, CodingKey {
            case pullRequest = "pullRequest"
        }
    }

    public struct UpdatePullRequestTitleInput: AWSEncodableShape {
        /// The system-generated ID of the pull request. To get this ID, use ListPullRequests.
        public let pullRequestId: String
        /// The updated title of the pull request. This replaces the existing title.
        public let title: String

        @inlinable
        public init(pullRequestId: String, title: String) {
            self.pullRequestId = pullRequestId
            self.title = title
        }

        public func validate(name: String) throws {
            try self.validate(self.title, name: "title", parent: name, max: 150)
        }

        private enum CodingKeys: String, CodingKey {
            case pullRequestId = "pullRequestId"
            case title = "title"
        }
    }

    public struct UpdatePullRequestTitleOutput: AWSDecodableShape {
        /// Information about the updated pull request.
        public let pullRequest: PullRequest

        @inlinable
        public init(pullRequest: PullRequest) {
            self.pullRequest = pullRequest
        }

        private enum CodingKeys: String, CodingKey {
            case pullRequest = "pullRequest"
        }
    }

    public struct UpdateRepositoryDescriptionInput: AWSEncodableShape {
        /// The new comment or description for the specified repository. Repository descriptions are limited to 1,000 characters.
        public let repositoryDescription: String?
        /// The name of the repository to set or change the comment or description for.
        public let repositoryName: String

        @inlinable
        public init(repositoryDescription: String? = nil, repositoryName: String) {
            self.repositoryDescription = repositoryDescription
            self.repositoryName = repositoryName
        }

        public func validate(name: String) throws {
            try self.validate(self.repositoryDescription, name: "repositoryDescription", parent: name, max: 1000)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case repositoryDescription = "repositoryDescription"
            case repositoryName = "repositoryName"
        }
    }

    public struct UpdateRepositoryEncryptionKeyInput: AWSEncodableShape {
        /// The ID of the encryption key. You can view the ID of an encryption key in the KMS console, or use the KMS APIs to programmatically retrieve a key ID. For more information about acceptable values for keyID, see  KeyId in the Decrypt API description in  the Key Management Service API Reference.
        public let kmsKeyId: String
        /// The name of the repository for which you want to update the KMS encryption key used to encrypt and decrypt the repository.
        public let repositoryName: String

        @inlinable
        public init(kmsKeyId: String, repositoryName: String) {
            self.kmsKeyId = kmsKeyId
            self.repositoryName = repositoryName
        }

        public func validate(name: String) throws {
            try self.validate(self.kmsKeyId, name: "kmsKeyId", parent: name, pattern: "^[a-zA-Z0-9:/_-]+$")
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, max: 100)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, min: 1)
            try self.validate(self.repositoryName, name: "repositoryName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case kmsKeyId = "kmsKeyId"
            case repositoryName = "repositoryName"
        }
    }

    public struct UpdateRepositoryEncryptionKeyOutput: AWSDecodableShape {
        /// The ID of the encryption key.
        public let kmsKeyId: String?
        /// The ID of the encryption key formerly used to encrypt and decrypt the repository.
        public let originalKmsKeyId: String?
        /// The ID of the repository.
        public let repositoryId: String?

        @inlinable
        public init(kmsKeyId: String? = nil, originalKmsKeyId: String? = nil, repositoryId: String? = nil) {
            self.kmsKeyId = kmsKeyId
            self.originalKmsKeyId = originalKmsKeyId
            self.repositoryId = repositoryId
        }

        private enum CodingKeys: String, CodingKey {
            case kmsKeyId = "kmsKeyId"
            case originalKmsKeyId = "originalKmsKeyId"
            case repositoryId = "repositoryId"
        }
    }

    public struct UpdateRepositoryNameInput: AWSEncodableShape {
        /// The new name for the repository.
        public let newName: String
        /// The current name of the repository.
        public let oldName: String

        @inlinable
        public init(newName: String, oldName: String) {
            self.newName = newName
            self.oldName = oldName
        }

        public func validate(name: String) throws {
            try self.validate(self.newName, name: "newName", parent: name, max: 100)
            try self.validate(self.newName, name: "newName", parent: name, min: 1)
            try self.validate(self.newName, name: "newName", parent: name, pattern: "^[\\w\\.-]+$")
            try self.validate(self.oldName, name: "oldName", parent: name, max: 100)
            try self.validate(self.oldName, name: "oldName", parent: name, min: 1)
            try self.validate(self.oldName, name: "oldName", parent: name, pattern: "^[\\w\\.-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case newName = "newName"
            case oldName = "oldName"
        }
    }

    public struct UserInfo: AWSDecodableShape {
        /// The date when the specified commit was commited, in timestamp format with GMT offset.
        public let date: String?
        /// The email address associated with the user who made the commit, if any.
        public let email: String?
        /// The name of the user who made the specified commit.
        public let name: String?

        @inlinable
        public init(date: String? = nil, email: String? = nil, name: String? = nil) {
            self.date = date
            self.email = email
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case date = "date"
            case email = "email"
            case name = "name"
        }
    }
}

// MARK: - Errors

/// Error enum for CodeCommit
public struct CodeCommitErrorType: AWSErrorType {
    enum Code: String {
        case actorDoesNotExistException = "ActorDoesNotExistException"
        case approvalRuleContentRequiredException = "ApprovalRuleContentRequiredException"
        case approvalRuleDoesNotExistException = "ApprovalRuleDoesNotExistException"
        case approvalRuleNameAlreadyExistsException = "ApprovalRuleNameAlreadyExistsException"
        case approvalRuleNameRequiredException = "ApprovalRuleNameRequiredException"
        case approvalRuleTemplateContentRequiredException = "ApprovalRuleTemplateContentRequiredException"
        case approvalRuleTemplateDoesNotExistException = "ApprovalRuleTemplateDoesNotExistException"
        case approvalRuleTemplateInUseException = "ApprovalRuleTemplateInUseException"
        case approvalRuleTemplateNameAlreadyExistsException = "ApprovalRuleTemplateNameAlreadyExistsException"
        case approvalRuleTemplateNameRequiredException = "ApprovalRuleTemplateNameRequiredException"
        case approvalStateRequiredException = "ApprovalStateRequiredException"
        case authorDoesNotExistException = "AuthorDoesNotExistException"
        case beforeCommitIdAndAfterCommitIdAreSameException = "BeforeCommitIdAndAfterCommitIdAreSameException"
        case blobIdDoesNotExistException = "BlobIdDoesNotExistException"
        case blobIdRequiredException = "BlobIdRequiredException"
        case branchDoesNotExistException = "BranchDoesNotExistException"
        case branchNameExistsException = "BranchNameExistsException"
        case branchNameIsTagNameException = "BranchNameIsTagNameException"
        case branchNameRequiredException = "BranchNameRequiredException"
        case cannotDeleteApprovalRuleFromTemplateException = "CannotDeleteApprovalRuleFromTemplateException"
        case cannotModifyApprovalRuleFromTemplateException = "CannotModifyApprovalRuleFromTemplateException"
        case clientRequestTokenRequiredException = "ClientRequestTokenRequiredException"
        case commentContentRequiredException = "CommentContentRequiredException"
        case commentContentSizeLimitExceededException = "CommentContentSizeLimitExceededException"
        case commentDeletedException = "CommentDeletedException"
        case commentDoesNotExistException = "CommentDoesNotExistException"
        case commentIdRequiredException = "CommentIdRequiredException"
        case commentNotCreatedByCallerException = "CommentNotCreatedByCallerException"
        case commitDoesNotExistException = "CommitDoesNotExistException"
        case commitIdDoesNotExistException = "CommitIdDoesNotExistException"
        case commitIdRequiredException = "CommitIdRequiredException"
        case commitIdsLimitExceededException = "CommitIdsLimitExceededException"
        case commitIdsListRequiredException = "CommitIdsListRequiredException"
        case commitMessageLengthExceededException = "CommitMessageLengthExceededException"
        case commitRequiredException = "CommitRequiredException"
        case concurrentReferenceUpdateException = "ConcurrentReferenceUpdateException"
        case defaultBranchCannotBeDeletedException = "DefaultBranchCannotBeDeletedException"
        case directoryNameConflictsWithFileNameException = "DirectoryNameConflictsWithFileNameException"
        case encryptionIntegrityChecksFailedException = "EncryptionIntegrityChecksFailedException"
        case encryptionKeyAccessDeniedException = "EncryptionKeyAccessDeniedException"
        case encryptionKeyDisabledException = "EncryptionKeyDisabledException"
        case encryptionKeyInvalidIdException = "EncryptionKeyInvalidIdException"
        case encryptionKeyInvalidUsageException = "EncryptionKeyInvalidUsageException"
        case encryptionKeyNotFoundException = "EncryptionKeyNotFoundException"
        case encryptionKeyRequiredException = "EncryptionKeyRequiredException"
        case encryptionKeyUnavailableException = "EncryptionKeyUnavailableException"
        case fileContentAndSourceFileSpecifiedException = "FileContentAndSourceFileSpecifiedException"
        case fileContentRequiredException = "FileContentRequiredException"
        case fileContentSizeLimitExceededException = "FileContentSizeLimitExceededException"
        case fileDoesNotExistException = "FileDoesNotExistException"
        case fileEntryRequiredException = "FileEntryRequiredException"
        case fileModeRequiredException = "FileModeRequiredException"
        case fileNameConflictsWithDirectoryNameException = "FileNameConflictsWithDirectoryNameException"
        case filePathConflictsWithSubmodulePathException = "FilePathConflictsWithSubmodulePathException"
        case fileTooLargeException = "FileTooLargeException"
        case folderContentSizeLimitExceededException = "FolderContentSizeLimitExceededException"
        case folderDoesNotExistException = "FolderDoesNotExistException"
        case idempotencyParameterMismatchException = "IdempotencyParameterMismatchException"
        case invalidActorArnException = "InvalidActorArnException"
        case invalidApprovalRuleContentException = "InvalidApprovalRuleContentException"
        case invalidApprovalRuleNameException = "InvalidApprovalRuleNameException"
        case invalidApprovalRuleTemplateContentException = "InvalidApprovalRuleTemplateContentException"
        case invalidApprovalRuleTemplateDescriptionException = "InvalidApprovalRuleTemplateDescriptionException"
        case invalidApprovalRuleTemplateNameException = "InvalidApprovalRuleTemplateNameException"
        case invalidApprovalStateException = "InvalidApprovalStateException"
        case invalidAuthorArnException = "InvalidAuthorArnException"
        case invalidBlobIdException = "InvalidBlobIdException"
        case invalidBranchNameException = "InvalidBranchNameException"
        case invalidClientRequestTokenException = "InvalidClientRequestTokenException"
        case invalidCommentIdException = "InvalidCommentIdException"
        case invalidCommitException = "InvalidCommitException"
        case invalidCommitIdException = "InvalidCommitIdException"
        case invalidConflictDetailLevelException = "InvalidConflictDetailLevelException"
        case invalidConflictResolutionException = "InvalidConflictResolutionException"
        case invalidConflictResolutionStrategyException = "InvalidConflictResolutionStrategyException"
        case invalidContinuationTokenException = "InvalidContinuationTokenException"
        case invalidDeletionParameterException = "InvalidDeletionParameterException"
        case invalidDescriptionException = "InvalidDescriptionException"
        case invalidDestinationCommitSpecifierException = "InvalidDestinationCommitSpecifierException"
        case invalidEmailException = "InvalidEmailException"
        case invalidFileLocationException = "InvalidFileLocationException"
        case invalidFileModeException = "InvalidFileModeException"
        case invalidFilePositionException = "InvalidFilePositionException"
        case invalidMaxConflictFilesException = "InvalidMaxConflictFilesException"
        case invalidMaxMergeHunksException = "InvalidMaxMergeHunksException"
        case invalidMaxResultsException = "InvalidMaxResultsException"
        case invalidMergeOptionException = "InvalidMergeOptionException"
        case invalidOrderException = "InvalidOrderException"
        case invalidOverrideStatusException = "InvalidOverrideStatusException"
        case invalidParentCommitIdException = "InvalidParentCommitIdException"
        case invalidPathException = "InvalidPathException"
        case invalidPullRequestEventTypeException = "InvalidPullRequestEventTypeException"
        case invalidPullRequestIdException = "InvalidPullRequestIdException"
        case invalidPullRequestStatusException = "InvalidPullRequestStatusException"
        case invalidPullRequestStatusUpdateException = "InvalidPullRequestStatusUpdateException"
        case invalidReactionUserArnException = "InvalidReactionUserArnException"
        case invalidReactionValueException = "InvalidReactionValueException"
        case invalidReferenceNameException = "InvalidReferenceNameException"
        case invalidRelativeFileVersionEnumException = "InvalidRelativeFileVersionEnumException"
        case invalidReplacementContentException = "InvalidReplacementContentException"
        case invalidReplacementTypeException = "InvalidReplacementTypeException"
        case invalidRepositoryDescriptionException = "InvalidRepositoryDescriptionException"
        case invalidRepositoryNameException = "InvalidRepositoryNameException"
        case invalidRepositoryTriggerBranchNameException = "InvalidRepositoryTriggerBranchNameException"
        case invalidRepositoryTriggerCustomDataException = "InvalidRepositoryTriggerCustomDataException"
        case invalidRepositoryTriggerDestinationArnException = "InvalidRepositoryTriggerDestinationArnException"
        case invalidRepositoryTriggerEventsException = "InvalidRepositoryTriggerEventsException"
        case invalidRepositoryTriggerNameException = "InvalidRepositoryTriggerNameException"
        case invalidRepositoryTriggerRegionException = "InvalidRepositoryTriggerRegionException"
        case invalidResourceArnException = "InvalidResourceArnException"
        case invalidRevisionIdException = "InvalidRevisionIdException"
        case invalidRuleContentSha256Exception = "InvalidRuleContentSha256Exception"
        case invalidSortByException = "InvalidSortByException"
        case invalidSourceCommitSpecifierException = "InvalidSourceCommitSpecifierException"
        case invalidSystemTagUsageException = "InvalidSystemTagUsageException"
        case invalidTagKeysListException = "InvalidTagKeysListException"
        case invalidTagsMapException = "InvalidTagsMapException"
        case invalidTargetBranchException = "InvalidTargetBranchException"
        case invalidTargetException = "InvalidTargetException"
        case invalidTargetsException = "InvalidTargetsException"
        case invalidTitleException = "InvalidTitleException"
        case manualMergeRequiredException = "ManualMergeRequiredException"
        case maximumBranchesExceededException = "MaximumBranchesExceededException"
        case maximumConflictResolutionEntriesExceededException = "MaximumConflictResolutionEntriesExceededException"
        case maximumFileContentToLoadExceededException = "MaximumFileContentToLoadExceededException"
        case maximumFileEntriesExceededException = "MaximumFileEntriesExceededException"
        case maximumItemsToCompareExceededException = "MaximumItemsToCompareExceededException"
        case maximumNumberOfApprovalsExceededException = "MaximumNumberOfApprovalsExceededException"
        case maximumOpenPullRequestsExceededException = "MaximumOpenPullRequestsExceededException"
        case maximumRepositoryNamesExceededException = "MaximumRepositoryNamesExceededException"
        case maximumRepositoryTriggersExceededException = "MaximumRepositoryTriggersExceededException"
        case maximumRuleTemplatesAssociatedWithRepositoryException = "MaximumRuleTemplatesAssociatedWithRepositoryException"
        case mergeOptionRequiredException = "MergeOptionRequiredException"
        case multipleConflictResolutionEntriesException = "MultipleConflictResolutionEntriesException"
        case multipleRepositoriesInPullRequestException = "MultipleRepositoriesInPullRequestException"
        case nameLengthExceededException = "NameLengthExceededException"
        case noChangeException = "NoChangeException"
        case numberOfRuleTemplatesExceededException = "NumberOfRuleTemplatesExceededException"
        case numberOfRulesExceededException = "NumberOfRulesExceededException"
        case operationNotAllowedException = "OperationNotAllowedException"
        case overrideAlreadySetException = "OverrideAlreadySetException"
        case overrideStatusRequiredException = "OverrideStatusRequiredException"
        case parentCommitDoesNotExistException = "ParentCommitDoesNotExistException"
        case parentCommitIdOutdatedException = "ParentCommitIdOutdatedException"
        case parentCommitIdRequiredException = "ParentCommitIdRequiredException"
        case pathDoesNotExistException = "PathDoesNotExistException"
        case pathRequiredException = "PathRequiredException"
        case pullRequestAlreadyClosedException = "PullRequestAlreadyClosedException"
        case pullRequestApprovalRulesNotSatisfiedException = "PullRequestApprovalRulesNotSatisfiedException"
        case pullRequestCannotBeApprovedByAuthorException = "PullRequestCannotBeApprovedByAuthorException"
        case pullRequestDoesNotExistException = "PullRequestDoesNotExistException"
        case pullRequestIdRequiredException = "PullRequestIdRequiredException"
        case pullRequestStatusRequiredException = "PullRequestStatusRequiredException"
        case putFileEntryConflictException = "PutFileEntryConflictException"
        case reactionLimitExceededException = "ReactionLimitExceededException"
        case reactionValueRequiredException = "ReactionValueRequiredException"
        case referenceDoesNotExistException = "ReferenceDoesNotExistException"
        case referenceNameRequiredException = "ReferenceNameRequiredException"
        case referenceTypeNotSupportedException = "ReferenceTypeNotSupportedException"
        case replacementContentRequiredException = "ReplacementContentRequiredException"
        case replacementTypeRequiredException = "ReplacementTypeRequiredException"
        case repositoryDoesNotExistException = "RepositoryDoesNotExistException"
        case repositoryLimitExceededException = "RepositoryLimitExceededException"
        case repositoryNameExistsException = "RepositoryNameExistsException"
        case repositoryNameRequiredException = "RepositoryNameRequiredException"
        case repositoryNamesRequiredException = "RepositoryNamesRequiredException"
        case repositoryNotAssociatedWithPullRequestException = "RepositoryNotAssociatedWithPullRequestException"
        case repositoryTriggerBranchNameListRequiredException = "RepositoryTriggerBranchNameListRequiredException"
        case repositoryTriggerDestinationArnRequiredException = "RepositoryTriggerDestinationArnRequiredException"
        case repositoryTriggerEventsListRequiredException = "RepositoryTriggerEventsListRequiredException"
        case repositoryTriggerNameRequiredException = "RepositoryTriggerNameRequiredException"
        case repositoryTriggersListRequiredException = "RepositoryTriggersListRequiredException"
        case resourceArnRequiredException = "ResourceArnRequiredException"
        case restrictedSourceFileException = "RestrictedSourceFileException"
        case revisionIdRequiredException = "RevisionIdRequiredException"
        case revisionNotCurrentException = "RevisionNotCurrentException"
        case sameFileContentException = "SameFileContentException"
        case samePathRequestException = "SamePathRequestException"
        case sourceAndDestinationAreSameException = "SourceAndDestinationAreSameException"
        case sourceFileOrContentRequiredException = "SourceFileOrContentRequiredException"
        case tagKeysListRequiredException = "TagKeysListRequiredException"
        case tagPolicyException = "TagPolicyException"
        case tagsMapRequiredException = "TagsMapRequiredException"
        case targetRequiredException = "TargetRequiredException"
        case targetsRequiredException = "TargetsRequiredException"
        case tipOfSourceReferenceIsDifferentException = "TipOfSourceReferenceIsDifferentException"
        case tipsDivergenceExceededException = "TipsDivergenceExceededException"
        case titleRequiredException = "TitleRequiredException"
        case tooManyTagsException = "TooManyTagsException"
    }

    private let error: Code
    public let context: AWSErrorContext?

    /// initialize CodeCommit
    public init?(errorCode: String, context: AWSErrorContext) {
        guard let error = Code(rawValue: errorCode) else { return nil }
        self.error = error
        self.context = context
    }

    internal init(_ error: Code) {
        self.error = error
        self.context = nil
    }

    /// return error code string
    public var errorCode: String { self.error.rawValue }

    /// The specified Amazon Resource Name (ARN) does not exist in the Amazon Web Services account.
    public static var actorDoesNotExistException: Self { .init(.actorDoesNotExistException) }
    /// The content for the approval rule is empty. You must provide some content for an approval rule. The content cannot be null.
    public static var approvalRuleContentRequiredException: Self { .init(.approvalRuleContentRequiredException) }
    /// The specified approval rule does not exist.
    public static var approvalRuleDoesNotExistException: Self { .init(.approvalRuleDoesNotExistException) }
    /// An approval rule with that name already exists. Approval rule names must be unique within the scope of a pull request.
    public static var approvalRuleNameAlreadyExistsException: Self { .init(.approvalRuleNameAlreadyExistsException) }
    /// An approval rule name is required, but was not specified.
    public static var approvalRuleNameRequiredException: Self { .init(.approvalRuleNameRequiredException) }
    /// The content for the approval rule template is empty. You must provide some content for an approval rule template. The content cannot be null.
    public static var approvalRuleTemplateContentRequiredException: Self { .init(.approvalRuleTemplateContentRequiredException) }
    /// The specified approval rule template does not exist. Verify that the name is correct and that you are signed in to the Amazon Web Services Region where the template was created, and then try again.
    public static var approvalRuleTemplateDoesNotExistException: Self { .init(.approvalRuleTemplateDoesNotExistException) }
    /// The approval rule template is associated with one or more repositories. You cannot delete a template that is associated with a repository. Remove all associations, and then try again.
    public static var approvalRuleTemplateInUseException: Self { .init(.approvalRuleTemplateInUseException) }
    /// You cannot create an approval rule template with that name because a template with that name already exists in this Amazon Web Services Region for your Amazon Web Services account. Approval rule template names must be unique.
    public static var approvalRuleTemplateNameAlreadyExistsException: Self { .init(.approvalRuleTemplateNameAlreadyExistsException) }
    /// An approval rule template name is required, but was not specified.
    public static var approvalRuleTemplateNameRequiredException: Self { .init(.approvalRuleTemplateNameRequiredException) }
    /// An approval state is required, but was not specified.
    public static var approvalStateRequiredException: Self { .init(.approvalStateRequiredException) }
    /// The specified Amazon Resource Name (ARN) does not exist in the Amazon Web Services account.
    public static var authorDoesNotExistException: Self { .init(.authorDoesNotExistException) }
    /// The before commit ID and the after commit ID are the same, which is not valid. The before commit ID and the after commit ID must be different commit IDs.
    public static var beforeCommitIdAndAfterCommitIdAreSameException: Self { .init(.beforeCommitIdAndAfterCommitIdAreSameException) }
    /// The specified blob does not exist.
    public static var blobIdDoesNotExistException: Self { .init(.blobIdDoesNotExistException) }
    /// A blob ID is required, but was not specified.
    public static var blobIdRequiredException: Self { .init(.blobIdRequiredException) }
    /// The specified branch does not exist.
    public static var branchDoesNotExistException: Self { .init(.branchDoesNotExistException) }
    /// Cannot create the branch with the specified name because the commit conflicts with an existing branch with the same name.
    ///  Branch names must be unique.
    public static var branchNameExistsException: Self { .init(.branchNameExistsException) }
    /// The specified branch name is not valid because it is a tag name. Enter the name of a branch in the repository. For a list of valid branch names, use ListBranches.
    public static var branchNameIsTagNameException: Self { .init(.branchNameIsTagNameException) }
    /// A branch name is required, but was not specified.
    public static var branchNameRequiredException: Self { .init(.branchNameRequiredException) }
    /// The approval rule cannot be deleted from the pull request because it was created by an approval rule template and applied to the pull request automatically.
    public static var cannotDeleteApprovalRuleFromTemplateException: Self { .init(.cannotDeleteApprovalRuleFromTemplateException) }
    /// The approval rule cannot be modified for the pull request because it was created by an approval rule template and applied to the pull request automatically.
    public static var cannotModifyApprovalRuleFromTemplateException: Self { .init(.cannotModifyApprovalRuleFromTemplateException) }
    /// A client request token is required. A client request token is an unique, client-generated idempotency token that, when provided in a request, ensures the request cannot be repeated with a changed parameter. If a request is received with the same parameters and a token is included, the request returns information about the initial request that used that token.
    public static var clientRequestTokenRequiredException: Self { .init(.clientRequestTokenRequiredException) }
    /// The comment is empty. You must provide some content for a comment. The content cannot be null.
    public static var commentContentRequiredException: Self { .init(.commentContentRequiredException) }
    /// The comment is too large. Comments are limited to 10,240 characters.
    public static var commentContentSizeLimitExceededException: Self { .init(.commentContentSizeLimitExceededException) }
    /// This comment has already been deleted. You cannot edit or delete a deleted comment.
    public static var commentDeletedException: Self { .init(.commentDeletedException) }
    /// No comment exists with the provided ID. Verify that you have used the correct ID, and then try again.
    public static var commentDoesNotExistException: Self { .init(.commentDoesNotExistException) }
    /// The comment ID is missing or null. A comment ID is required.
    public static var commentIdRequiredException: Self { .init(.commentIdRequiredException) }
    /// You cannot modify or delete this comment. Only comment authors can modify or delete their comments.
    public static var commentNotCreatedByCallerException: Self { .init(.commentNotCreatedByCallerException) }
    /// The specified commit does not exist or no commit was specified, and the specified repository has no default branch.
    public static var commitDoesNotExistException: Self { .init(.commitDoesNotExistException) }
    /// The specified commit ID does not exist.
    public static var commitIdDoesNotExistException: Self { .init(.commitIdDoesNotExistException) }
    /// A commit ID was not specified.
    public static var commitIdRequiredException: Self { .init(.commitIdRequiredException) }
    /// The maximum number of allowed commit IDs in a batch request is 100. Verify that your batch requests contains no more than 100 commit IDs, and then try again.
    public static var commitIdsLimitExceededException: Self { .init(.commitIdsLimitExceededException) }
    /// A list of commit IDs is required, but was either not specified or the list was empty.
    public static var commitIdsListRequiredException: Self { .init(.commitIdsListRequiredException) }
    /// The commit message is too long. Provide a shorter string.
    public static var commitMessageLengthExceededException: Self { .init(.commitMessageLengthExceededException) }
    /// A commit was not specified.
    public static var commitRequiredException: Self { .init(.commitRequiredException) }
    /// The merge cannot be completed because the target branch has been modified. Another user might have modified the target branch while the merge was in progress. Wait a few minutes, and then try again.
    public static var concurrentReferenceUpdateException: Self { .init(.concurrentReferenceUpdateException) }
    /// The specified branch is the default branch for the repository, and cannot be deleted. To delete this branch, you must first set another branch as the default branch.
    public static var defaultBranchCannotBeDeletedException: Self { .init(.defaultBranchCannotBeDeletedException) }
    /// A file cannot be added to the repository because the specified path name has the same name as a file that already exists in this repository.  Either provide a different name for the file, or specify a different path for the file.
    public static var directoryNameConflictsWithFileNameException: Self { .init(.directoryNameConflictsWithFileNameException) }
    /// An encryption integrity check failed.
    public static var encryptionIntegrityChecksFailedException: Self { .init(.encryptionIntegrityChecksFailedException) }
    /// An encryption key could not be accessed.
    public static var encryptionKeyAccessDeniedException: Self { .init(.encryptionKeyAccessDeniedException) }
    /// The encryption key is disabled.
    public static var encryptionKeyDisabledException: Self { .init(.encryptionKeyDisabledException) }
    /// The Key Management Service encryption key is not valid.
    public static var encryptionKeyInvalidIdException: Self { .init(.encryptionKeyInvalidIdException) }
    /// A KMS encryption key was used to try and encrypt or decrypt a repository, but either the repository or the key was not in a valid state to support the operation.
    public static var encryptionKeyInvalidUsageException: Self { .init(.encryptionKeyInvalidUsageException) }
    /// No encryption key was found.
    public static var encryptionKeyNotFoundException: Self { .init(.encryptionKeyNotFoundException) }
    /// A KMS encryption key ID is required but was not specified.
    public static var encryptionKeyRequiredException: Self { .init(.encryptionKeyRequiredException) }
    /// The encryption key is not available.
    public static var encryptionKeyUnavailableException: Self { .init(.encryptionKeyUnavailableException) }
    /// The commit cannot be created because both a source file and file content have been specified for the same file. You cannot provide both. Either specify a source file or provide the file content directly.
    public static var fileContentAndSourceFileSpecifiedException: Self { .init(.fileContentAndSourceFileSpecifiedException) }
    /// The file cannot be added because it is empty. Empty files cannot be added to the repository with this API.
    public static var fileContentRequiredException: Self { .init(.fileContentRequiredException) }
    /// The file cannot be added because it is too large. The maximum file size is 6 MB, and the combined file content change size is 7 MB. Consider making these changes using a Git client.
    public static var fileContentSizeLimitExceededException: Self { .init(.fileContentSizeLimitExceededException) }
    /// The specified file does not exist. Verify that you have used the correct file name, full path, and extension.
    public static var fileDoesNotExistException: Self { .init(.fileDoesNotExistException) }
    /// The commit cannot be created because no files have been specified as added, updated, or changed (PutFile or DeleteFile) for the commit.
    public static var fileEntryRequiredException: Self { .init(.fileEntryRequiredException) }
    /// The commit cannot be created because no file mode has been specified. A file mode is required to update mode permissions for a file.
    public static var fileModeRequiredException: Self { .init(.fileModeRequiredException) }
    /// A file cannot be added to the repository because the specified file name has the same name as a directory in this repository. Either provide another name for the file, or add the file in a directory that does not match the file name.
    public static var fileNameConflictsWithDirectoryNameException: Self { .init(.fileNameConflictsWithDirectoryNameException) }
    /// The commit cannot be created because a specified file path points to a submodule. Verify that the destination files have valid file paths that do not point to a submodule.
    public static var filePathConflictsWithSubmodulePathException: Self { .init(.filePathConflictsWithSubmodulePathException) }
    /// The specified file exceeds the file size limit for CodeCommit. For more information about limits in CodeCommit, see Quotas in the CodeCommit User Guide.
    public static var fileTooLargeException: Self { .init(.fileTooLargeException) }
    /// The commit cannot be created because at least one of the overall changes in the commit results in a  folder whose contents exceed the limit of 6 MB. Either reduce the number and size of your changes, or split the changes across multiple folders.
    public static var folderContentSizeLimitExceededException: Self { .init(.folderContentSizeLimitExceededException) }
    /// The specified folder does not exist. Either the folder name is not correct, or you did not enter the full path to the folder.
    public static var folderDoesNotExistException: Self { .init(.folderDoesNotExistException) }
    /// The client request token is not valid. Either the token is not in a valid format, or the token has been used in a previous request and cannot be reused.
    public static var idempotencyParameterMismatchException: Self { .init(.idempotencyParameterMismatchException) }
    /// The Amazon Resource Name (ARN) is not valid. Make sure that you have provided the full ARN for the user who initiated the change for the pull request, and then try again.
    public static var invalidActorArnException: Self { .init(.invalidActorArnException) }
    /// The content for the approval rule is not valid.
    public static var invalidApprovalRuleContentException: Self { .init(.invalidApprovalRuleContentException) }
    /// The name for the approval rule is not valid.
    public static var invalidApprovalRuleNameException: Self { .init(.invalidApprovalRuleNameException) }
    /// The content of the approval rule template is not valid.
    public static var invalidApprovalRuleTemplateContentException: Self { .init(.invalidApprovalRuleTemplateContentException) }
    /// The description for the approval rule template is not valid because it exceeds the maximum characters allowed for a description. For more information about limits in CodeCommit,  see Quotas in the CodeCommit User Guide.
    public static var invalidApprovalRuleTemplateDescriptionException: Self { .init(.invalidApprovalRuleTemplateDescriptionException) }
    /// The name of the approval rule template is not valid. Template names must be between 1 and 100 valid characters in length. For more information about limits in CodeCommit, see Quotas in the CodeCommit User Guide.
    public static var invalidApprovalRuleTemplateNameException: Self { .init(.invalidApprovalRuleTemplateNameException) }
    /// The state for the approval is not valid. Valid values include APPROVE and REVOKE.
    public static var invalidApprovalStateException: Self { .init(.invalidApprovalStateException) }
    /// The Amazon Resource Name (ARN) is not valid. Make sure that you have provided the full ARN for the author of the pull request, and then try again.
    public static var invalidAuthorArnException: Self { .init(.invalidAuthorArnException) }
    /// The specified blob is not valid.
    public static var invalidBlobIdException: Self { .init(.invalidBlobIdException) }
    /// The specified reference name is not valid.
    public static var invalidBranchNameException: Self { .init(.invalidBranchNameException) }
    /// The client request token is not valid.
    public static var invalidClientRequestTokenException: Self { .init(.invalidClientRequestTokenException) }
    /// The comment ID is not in a valid format. Make sure that you have provided the full comment ID.
    public static var invalidCommentIdException: Self { .init(.invalidCommentIdException) }
    /// The specified commit is not valid.
    public static var invalidCommitException: Self { .init(.invalidCommitException) }
    /// The specified commit ID is not valid.
    public static var invalidCommitIdException: Self { .init(.invalidCommitIdException) }
    /// The specified conflict detail level is not valid.
    public static var invalidConflictDetailLevelException: Self { .init(.invalidConflictDetailLevelException) }
    /// The specified conflict resolution list is not valid.
    public static var invalidConflictResolutionException: Self { .init(.invalidConflictResolutionException) }
    /// The specified conflict resolution strategy is not valid.
    public static var invalidConflictResolutionStrategyException: Self { .init(.invalidConflictResolutionStrategyException) }
    /// The specified continuation token is not valid.
    public static var invalidContinuationTokenException: Self { .init(.invalidContinuationTokenException) }
    /// The specified deletion parameter is not valid.
    public static var invalidDeletionParameterException: Self { .init(.invalidDeletionParameterException) }
    /// The pull request description is not valid. Descriptions cannot be more than 1,000 characters.
    public static var invalidDescriptionException: Self { .init(.invalidDescriptionException) }
    /// The destination commit specifier is not valid. You must provide a valid branch name, tag, or full commit ID.
    public static var invalidDestinationCommitSpecifierException: Self { .init(.invalidDestinationCommitSpecifierException) }
    /// The specified email address either contains one or more characters that are not allowed, or it exceeds the maximum number of characters allowed for an email address.
    public static var invalidEmailException: Self { .init(.invalidEmailException) }
    /// The location of the file is not valid. Make sure that you include the file name and extension.
    public static var invalidFileLocationException: Self { .init(.invalidFileLocationException) }
    /// The specified file mode permission is not valid. For a list of valid file mode permissions, see PutFile.
    public static var invalidFileModeException: Self { .init(.invalidFileModeException) }
    /// The position is not valid. Make sure that the line number exists in the version of the file you want to comment on.
    public static var invalidFilePositionException: Self { .init(.invalidFilePositionException) }
    /// The specified value for the number of conflict files to return is not valid.
    public static var invalidMaxConflictFilesException: Self { .init(.invalidMaxConflictFilesException) }
    /// The specified value for the number of merge hunks to return is not valid.
    public static var invalidMaxMergeHunksException: Self { .init(.invalidMaxMergeHunksException) }
    /// The specified number of maximum results is not valid.
    public static var invalidMaxResultsException: Self { .init(.invalidMaxResultsException) }
    /// The specified merge option is not valid for this operation. Not all merge strategies are supported for all operations.
    public static var invalidMergeOptionException: Self { .init(.invalidMergeOptionException) }
    /// The specified sort order is not valid.
    public static var invalidOrderException: Self { .init(.invalidOrderException) }
    /// The override status is not valid. Valid statuses are OVERRIDE and REVOKE.
    public static var invalidOverrideStatusException: Self { .init(.invalidOverrideStatusException) }
    /// The parent commit ID is not valid. The commit ID cannot be empty, and must match the head commit ID for the branch of the repository where you  want to add or update a file.
    public static var invalidParentCommitIdException: Self { .init(.invalidParentCommitIdException) }
    /// The specified path is not valid.
    public static var invalidPathException: Self { .init(.invalidPathException) }
    /// The pull request event type is not valid.
    public static var invalidPullRequestEventTypeException: Self { .init(.invalidPullRequestEventTypeException) }
    /// The pull request ID is not valid. Make sure that you have provided the full ID and that the pull request is in the specified repository, and then try again.
    public static var invalidPullRequestIdException: Self { .init(.invalidPullRequestIdException) }
    /// The pull request status is not valid. The only valid values are OPEN and CLOSED.
    public static var invalidPullRequestStatusException: Self { .init(.invalidPullRequestStatusException) }
    /// The pull request status update is not valid. The only valid update is from OPEN to CLOSED.
    public static var invalidPullRequestStatusUpdateException: Self { .init(.invalidPullRequestStatusUpdateException) }
    /// The Amazon Resource Name (ARN) of the user or identity is not valid.
    public static var invalidReactionUserArnException: Self { .init(.invalidReactionUserArnException) }
    /// The value of the reaction is not valid. For more information, see the CodeCommit User Guide.
    public static var invalidReactionValueException: Self { .init(.invalidReactionValueException) }
    /// The specified reference name format is not valid. Reference names must conform to the Git references format (for example, refs/heads/main). For more information, see Git Internals - Git References or consult your Git documentation.
    public static var invalidReferenceNameException: Self { .init(.invalidReferenceNameException) }
    /// Either the enum is not in a valid format, or the specified file version enum is not valid in respect to the current file version.
    public static var invalidRelativeFileVersionEnumException: Self { .init(.invalidRelativeFileVersionEnumException) }
    /// Automerge was specified for resolving the conflict, but the replacement type is not valid or content is missing.
    public static var invalidReplacementContentException: Self { .init(.invalidReplacementContentException) }
    /// Automerge was specified for resolving the conflict, but the specified replacement type is not valid.
    public static var invalidReplacementTypeException: Self { .init(.invalidReplacementTypeException) }
    /// The specified repository description is not valid.
    public static var invalidRepositoryDescriptionException: Self { .init(.invalidRepositoryDescriptionException) }
    /// A specified repository name is not valid.  This exception occurs only when a specified repository name is not valid. Other exceptions occur when a required repository parameter is missing, or when a specified repository does not exist.
    public static var invalidRepositoryNameException: Self { .init(.invalidRepositoryNameException) }
    /// One or more branch names specified for the trigger is not valid.
    public static var invalidRepositoryTriggerBranchNameException: Self { .init(.invalidRepositoryTriggerBranchNameException) }
    /// The custom data provided for the trigger is not valid.
    public static var invalidRepositoryTriggerCustomDataException: Self { .init(.invalidRepositoryTriggerCustomDataException) }
    /// The Amazon Resource Name (ARN) for the trigger is not valid for the specified destination. The most common reason for this error is that the ARN does not meet the requirements for the service type.
    public static var invalidRepositoryTriggerDestinationArnException: Self { .init(.invalidRepositoryTriggerDestinationArnException) }
    /// One or more events specified for the trigger is not valid. Check to make sure that all events specified match the requirements for allowed events.
    public static var invalidRepositoryTriggerEventsException: Self { .init(.invalidRepositoryTriggerEventsException) }
    /// The name of the trigger is not valid.
    public static var invalidRepositoryTriggerNameException: Self { .init(.invalidRepositoryTriggerNameException) }
    /// The Amazon Web Services Region for the trigger target does not match the Amazon Web Services Region for the repository. Triggers must be created in the same Amazon Web Services Region as the target for the trigger.
    public static var invalidRepositoryTriggerRegionException: Self { .init(.invalidRepositoryTriggerRegionException) }
    /// The value for the resource ARN is not valid. For more information about resources in CodeCommit, see  CodeCommit Resources and Operations in the CodeCommit User Guide.
    public static var invalidResourceArnException: Self { .init(.invalidResourceArnException) }
    /// The revision ID is not valid. Use GetPullRequest to determine the value.
    public static var invalidRevisionIdException: Self { .init(.invalidRevisionIdException) }
    /// The SHA-256 hash signature for the rule content is not valid.
    public static var invalidRuleContentSha256Exception: Self { .init(.invalidRuleContentSha256Exception) }
    /// The specified sort by value is not valid.
    public static var invalidSortByException: Self { .init(.invalidSortByException) }
    /// The source commit specifier is not valid. You must provide a valid branch name, tag, or full commit ID.
    public static var invalidSourceCommitSpecifierException: Self { .init(.invalidSourceCommitSpecifierException) }
    /// The specified tag is not valid. Key names cannot be prefixed with aws:.
    public static var invalidSystemTagUsageException: Self { .init(.invalidSystemTagUsageException) }
    /// The list of tags is not valid.
    public static var invalidTagKeysListException: Self { .init(.invalidTagKeysListException) }
    /// The map of tags is not valid.
    public static var invalidTagsMapException: Self { .init(.invalidTagsMapException) }
    /// The specified target branch is not valid.
    public static var invalidTargetBranchException: Self { .init(.invalidTargetBranchException) }
    /// The target for the pull request is not valid. A target must contain the full values for the repository name, source branch, and destination branch for the pull request.
    public static var invalidTargetException: Self { .init(.invalidTargetException) }
    /// The targets for the pull request is not valid or not in a valid format. Targets are a list of target objects. Each target object must contain the full values for  the repository name, source branch, and destination branch for a pull request.
    public static var invalidTargetsException: Self { .init(.invalidTargetsException) }
    /// The title of the pull request is not valid. Pull request titles cannot exceed 100 characters in length.
    public static var invalidTitleException: Self { .init(.invalidTitleException) }
    /// The pull request cannot be merged automatically into the destination branch. You must manually merge the branches and resolve any conflicts.
    public static var manualMergeRequiredException: Self { .init(.manualMergeRequiredException) }
    /// The number of branches for the trigger was exceeded.
    public static var maximumBranchesExceededException: Self { .init(.maximumBranchesExceededException) }
    /// The number of allowed conflict resolution entries was exceeded.
    public static var maximumConflictResolutionEntriesExceededException: Self { .init(.maximumConflictResolutionEntriesExceededException) }
    /// The number of files to load exceeds the allowed limit.
    public static var maximumFileContentToLoadExceededException: Self { .init(.maximumFileContentToLoadExceededException) }
    /// The number of specified files to change as part of this commit exceeds the maximum number of files  that can be changed in a single commit. Consider using a Git client for these changes.
    public static var maximumFileEntriesExceededException: Self { .init(.maximumFileEntriesExceededException) }
    /// The number of items to compare between the source or destination branches and the merge base has exceeded the maximum allowed.
    public static var maximumItemsToCompareExceededException: Self { .init(.maximumItemsToCompareExceededException) }
    /// The number of approvals required for the approval rule exceeds the maximum number allowed.
    public static var maximumNumberOfApprovalsExceededException: Self { .init(.maximumNumberOfApprovalsExceededException) }
    /// You cannot create the pull request because the repository has too many open pull requests.  The maximum number of open pull requests for a repository is 1,000. Close one or more open pull requests, and then try again.
    public static var maximumOpenPullRequestsExceededException: Self { .init(.maximumOpenPullRequestsExceededException) }
    /// The maximum number of allowed repository names was exceeded. Currently, this number is 100.
    public static var maximumRepositoryNamesExceededException: Self { .init(.maximumRepositoryNamesExceededException) }
    /// The number of triggers allowed for the repository was exceeded.
    public static var maximumRepositoryTriggersExceededException: Self { .init(.maximumRepositoryTriggersExceededException) }
    /// The maximum number of approval rule templates for a repository has been exceeded. You cannot associate more than 25  approval rule templates with a repository.
    public static var maximumRuleTemplatesAssociatedWithRepositoryException: Self { .init(.maximumRuleTemplatesAssociatedWithRepositoryException) }
    /// A merge option or stategy is required, and none was provided.
    public static var mergeOptionRequiredException: Self { .init(.mergeOptionRequiredException) }
    /// More than one conflict resolution entries exists for the conflict. A conflict can have only one conflict resolution entry.
    public static var multipleConflictResolutionEntriesException: Self { .init(.multipleConflictResolutionEntriesException) }
    /// You cannot include more than one repository in a pull request. Make sure you have specified only one repository name in your request, and then try again.
    public static var multipleRepositoriesInPullRequestException: Self { .init(.multipleRepositoriesInPullRequestException) }
    /// The user name is not valid because it has exceeded the character limit for author names.
    public static var nameLengthExceededException: Self { .init(.nameLengthExceededException) }
    /// The commit cannot be created because no changes will be made to the repository as a result of this commit. A commit must contain at least one change.
    public static var noChangeException: Self { .init(.noChangeException) }
    /// The maximum number of approval rule templates has been exceeded for this Amazon Web Services Region.
    public static var numberOfRuleTemplatesExceededException: Self { .init(.numberOfRuleTemplatesExceededException) }
    /// The approval rule cannot be added. The pull request has the maximum number of approval rules associated with it.
    public static var numberOfRulesExceededException: Self { .init(.numberOfRulesExceededException) }
    /// The requested action is not allowed.
    public static var operationNotAllowedException: Self { .init(.operationNotAllowedException) }
    /// The pull request has already had its approval rules set to override.
    public static var overrideAlreadySetException: Self { .init(.overrideAlreadySetException) }
    /// An override status is required, but no value was provided. Valid values include OVERRIDE and REVOKE.
    public static var overrideStatusRequiredException: Self { .init(.overrideStatusRequiredException) }
    /// The parent commit ID is not valid because it does not exist. The specified parent commit ID does not exist in the specified branch of the repository.
    public static var parentCommitDoesNotExistException: Self { .init(.parentCommitDoesNotExistException) }
    /// The file could not be added because the provided parent commit ID is not the current tip of the specified branch. To view the full commit ID of the current head of the branch, use GetBranch.
    public static var parentCommitIdOutdatedException: Self { .init(.parentCommitIdOutdatedException) }
    /// A parent commit ID is required. To view the full commit ID of a branch in a repository, use GetBranch or a Git command  (for example, git pull or git log).
    public static var parentCommitIdRequiredException: Self { .init(.parentCommitIdRequiredException) }
    /// The specified path does not exist.
    public static var pathDoesNotExistException: Self { .init(.pathDoesNotExistException) }
    /// The folderPath for a location cannot be null.
    public static var pathRequiredException: Self { .init(.pathRequiredException) }
    /// The pull request status cannot be updated because it is already closed.
    public static var pullRequestAlreadyClosedException: Self { .init(.pullRequestAlreadyClosedException) }
    /// The pull request cannot be merged because one or more approval rules applied to the pull request have conditions that have not been met.
    public static var pullRequestApprovalRulesNotSatisfiedException: Self { .init(.pullRequestApprovalRulesNotSatisfiedException) }
    /// The approval cannot be applied because the user approving the pull request matches the user who created the pull request. You cannot approve a pull  request that you created.
    public static var pullRequestCannotBeApprovedByAuthorException: Self { .init(.pullRequestCannotBeApprovedByAuthorException) }
    /// The pull request ID could not be found. Make sure that you have specified the correct repository name and pull request ID, and then try again.
    public static var pullRequestDoesNotExistException: Self { .init(.pullRequestDoesNotExistException) }
    /// A pull request ID is required, but none was provided.
    public static var pullRequestIdRequiredException: Self { .init(.pullRequestIdRequiredException) }
    /// A pull request status is required, but none was provided.
    public static var pullRequestStatusRequiredException: Self { .init(.pullRequestStatusRequiredException) }
    /// The commit cannot be created because one or more files specified in the commit reference both a file and a folder.
    public static var putFileEntryConflictException: Self { .init(.putFileEntryConflictException) }
    /// The number of reactions has been exceeded. Reactions are limited to one reaction per user for each individual comment ID.
    public static var reactionLimitExceededException: Self { .init(.reactionLimitExceededException) }
    /// A reaction value is required.
    public static var reactionValueRequiredException: Self { .init(.reactionValueRequiredException) }
    /// The specified reference does not exist. You must provide a full commit ID.
    public static var referenceDoesNotExistException: Self { .init(.referenceDoesNotExistException) }
    /// A reference name is required, but none was provided.
    public static var referenceNameRequiredException: Self { .init(.referenceNameRequiredException) }
    /// The specified reference is not a supported type.
    public static var referenceTypeNotSupportedException: Self { .init(.referenceTypeNotSupportedException) }
    /// USE_NEW_CONTENT was specified, but no replacement content has been provided.
    public static var replacementContentRequiredException: Self { .init(.replacementContentRequiredException) }
    /// A replacement type is required.
    public static var replacementTypeRequiredException: Self { .init(.replacementTypeRequiredException) }
    /// The specified repository does not exist.
    public static var repositoryDoesNotExistException: Self { .init(.repositoryDoesNotExistException) }
    /// A repository resource limit was exceeded.
    public static var repositoryLimitExceededException: Self { .init(.repositoryLimitExceededException) }
    /// The specified repository name already exists.
    public static var repositoryNameExistsException: Self { .init(.repositoryNameExistsException) }
    /// A repository name is required, but was not specified.
    public static var repositoryNameRequiredException: Self { .init(.repositoryNameRequiredException) }
    /// At least one repository name object is required, but was not specified.
    public static var repositoryNamesRequiredException: Self { .init(.repositoryNamesRequiredException) }
    /// The repository does not contain any pull requests with that pull request ID. Use GetPullRequest to verify the correct repository name for the pull request ID.
    public static var repositoryNotAssociatedWithPullRequestException: Self { .init(.repositoryNotAssociatedWithPullRequestException) }
    /// At least one branch name is required, but was not specified in the trigger configuration.
    public static var repositoryTriggerBranchNameListRequiredException: Self { .init(.repositoryTriggerBranchNameListRequiredException) }
    /// A destination ARN for the target service for the trigger is required, but was not specified.
    public static var repositoryTriggerDestinationArnRequiredException: Self { .init(.repositoryTriggerDestinationArnRequiredException) }
    /// At least one event for the trigger is required, but was not specified.
    public static var repositoryTriggerEventsListRequiredException: Self { .init(.repositoryTriggerEventsListRequiredException) }
    /// A name for the trigger is required, but was not specified.
    public static var repositoryTriggerNameRequiredException: Self { .init(.repositoryTriggerNameRequiredException) }
    /// The list of triggers for the repository is required, but was not specified.
    public static var repositoryTriggersListRequiredException: Self { .init(.repositoryTriggersListRequiredException) }
    /// A valid Amazon Resource Name (ARN) for an CodeCommit resource is required. For a list of valid resources in CodeCommit, see  CodeCommit Resources and Operations in the CodeCommit User Guide.
    public static var resourceArnRequiredException: Self { .init(.resourceArnRequiredException) }
    /// The commit cannot be created because one of the changes specifies copying or moving a .gitkeep file.
    public static var restrictedSourceFileException: Self { .init(.restrictedSourceFileException) }
    /// A revision ID is required, but was not provided.
    public static var revisionIdRequiredException: Self { .init(.revisionIdRequiredException) }
    /// The revision ID provided in the request does not match the current revision ID. Use GetPullRequest to retrieve the current revision ID.
    public static var revisionNotCurrentException: Self { .init(.revisionNotCurrentException) }
    /// The file was not added or updated because the content of the file is exactly the same as the content of that file in the repository and branch that you specified.
    public static var sameFileContentException: Self { .init(.sameFileContentException) }
    /// The commit cannot be created because one or more changes in this commit duplicate actions in the same file path. For example, you cannot make the same delete request to the same file in the same file path twice, or make a delete request and a move request to the same file as part of the same commit.
    public static var samePathRequestException: Self { .init(.samePathRequestException) }
    /// The source branch and destination branch for the pull request are the same. You must specify different branches for the source and destination.
    public static var sourceAndDestinationAreSameException: Self { .init(.sourceAndDestinationAreSameException) }
    /// The commit cannot be created because no source files or file content have been specified for the commit.
    public static var sourceFileOrContentRequiredException: Self { .init(.sourceFileOrContentRequiredException) }
    /// A list of tag keys is required. The list cannot be empty or null.
    public static var tagKeysListRequiredException: Self { .init(.tagKeysListRequiredException) }
    /// The tag policy is not valid.
    public static var tagPolicyException: Self { .init(.tagPolicyException) }
    /// A map of tags is required.
    public static var tagsMapRequiredException: Self { .init(.tagsMapRequiredException) }
    /// A pull request target is required. It cannot be empty or null. A pull request target must contain the full values for the repository name, source branch, and destination branch for the pull request.
    public static var targetRequiredException: Self { .init(.targetRequiredException) }
    /// An array of target objects is required. It cannot be empty or null.
    public static var targetsRequiredException: Self { .init(.targetsRequiredException) }
    /// The tip of the source branch in the destination repository does not match the tip of the source branch specified in your request.  The pull request might have been updated. Make sure that you have the latest changes.
    public static var tipOfSourceReferenceIsDifferentException: Self { .init(.tipOfSourceReferenceIsDifferentException) }
    /// The divergence between the tips of the provided commit specifiers is too great to determine whether there might be  any merge conflicts. Locally compare the specifiers using git diff or a diff tool.
    public static var tipsDivergenceExceededException: Self { .init(.tipsDivergenceExceededException) }
    /// A pull request title is required. It cannot be empty or null.
    public static var titleRequiredException: Self { .init(.titleRequiredException) }
    /// The maximum number of tags for an CodeCommit resource has been exceeded.
    public static var tooManyTagsException: Self { .init(.tooManyTagsException) }
}

extension CodeCommitErrorType: Equatable {
    public static func == (lhs: CodeCommitErrorType, rhs: CodeCommitErrorType) -> Bool {
        lhs.error == rhs.error
    }
}

extension CodeCommitErrorType: CustomStringConvertible {
    public var description: String {
        return "\(self.error.rawValue): \(self.message ?? "")"
    }
}
